summaryrefslogtreecommitdiff
path: root/gcc/fortran/trans-array.c
diff options
context:
space:
mode:
authorAndre Vehreschild <vehre@gcc.gnu.org>2016-11-18 11:23:34 +0100
committerAndre Vehreschild <vehre@gcc.gnu.org>2016-11-18 11:23:34 +0100
commit150ff6559f9db1a1514b8c64fe863685e96937c5 (patch)
tree10a37bb0547f6d6f7f1a8cd5ee66d625f4ce009c /gcc/fortran/trans-array.c
parent658a1797a67c6a36850fa4b6ca36e294e7417285 (diff)
downloadgcc-150ff6559f9db1a1514b8c64fe863685e96937c5.tar.gz
Next step.
Diffstat (limited to 'gcc/fortran/trans-array.c')
-rw-r--r--gcc/fortran/trans-array.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c
index eb09215627a..4ac36746a20 100644
--- a/gcc/fortran/trans-array.c
+++ b/gcc/fortran/trans-array.c
@@ -9654,9 +9654,14 @@ gfc_trans_deferred_array (gfc_symbol * sym, gfc_wrapped_block * block)
gfc_conv_descriptor_data_set (&init, descriptor, null_pointer_node);
if (flag_coarray == GFC_FCOARRAY_LIB && sym->attr.codimension)
{
- tmp = gfc_conv_descriptor_token (descriptor);
- gfc_add_modify (&init, tmp, fold_convert (TREE_TYPE (tmp),
- null_pointer_node));
+ /* Declare the variable static so its array descriptor stays present
+ after leaving the scope. It may still be accessed through another
+ image. This may happen, for example, with the caf_mpi
+ implementation. */
+ TREE_STATIC (descriptor) = 1;
+ tmp = gfc_conv_descriptor_token (descriptor);
+ gfc_add_modify (&init, tmp, fold_convert (TREE_TYPE (tmp),
+ null_pointer_node));
}
}