aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/trans-array.c
diff options
context:
space:
mode:
authorThomas Koenig <tkoenig@gcc.gnu.org>2019-03-10 10:42:23 +0000
committerThomas Koenig <tkoenig@gcc.gnu.org>2019-03-10 10:42:23 +0000
commit4932364bd569d131e6f0dbb68ed5a538be3d07f3 (patch)
tree9ba42260481ecfc8c22628b12bdd09b6d36b193f /gcc/fortran/trans-array.c
parent2263c69edc270c1e762c88e771d12dd5d09b052d (diff)
downloadgcc-4932364bd569d131e6f0dbb68ed5a538be3d07f3.zip
gcc-4932364bd569d131e6f0dbb68ed5a538be3d07f3.tar.gz
gcc-4932364bd569d131e6f0dbb68ed5a538be3d07f3.tar.bz2
re PR fortran/66089 (elemental dependency mishandling when class array are involved)
2019-03-10 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/66089 * trans-array.c (gfc_scalar_elemental_arg_saved_as_reference): Return false if a scalar tempoary is needed. (gfc_walk_variable_expr): Fix up class refs. 2019-03-10 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/66089 * gfortran.dg/dependency_53.f90: New test. From-SVN: r269549
Diffstat (limited to 'gcc/fortran/trans-array.c')
-rw-r--r--gcc/fortran/trans-array.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c
index 6192e68..1379426 100644
--- a/gcc/fortran/trans-array.c
+++ b/gcc/fortran/trans-array.c
@@ -2699,6 +2699,9 @@ gfc_scalar_elemental_arg_saved_as_reference (gfc_ss_info * ss_info)
if (ss_info->type != GFC_SS_REFERENCE)
return false;
+ if (ss_info->data.scalar.needs_temporary)
+ return false;
+
/* If the actual argument can be absent (in other words, it can
be a NULL reference), don't try to evaluate it; pass instead
the reference directly. */
@@ -10515,6 +10518,8 @@ gfc_walk_variable_expr (gfc_ss * ss, gfc_expr * expr)
{
gfc_ref *ref;
+ gfc_fix_class_refs (expr);
+
for (ref = expr->ref; ref; ref = ref->next)
if (ref->type == REF_ARRAY && ref->u.ar.type != AR_ELEMENT)
break;