diff options
author | Thomas Koenig <tkoenig@gcc.gnu.org> | 2019-03-10 10:42:23 +0000 |
---|---|---|
committer | Thomas Koenig <tkoenig@gcc.gnu.org> | 2019-03-10 10:42:23 +0000 |
commit | 4932364bd569d131e6f0dbb68ed5a538be3d07f3 (patch) | |
tree | 9ba42260481ecfc8c22628b12bdd09b6d36b193f /gcc/fortran/trans-array.c | |
parent | 2263c69edc270c1e762c88e771d12dd5d09b052d (diff) | |
download | gcc-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.c | 5 |
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; |