From d0477233215e37dea91b1a98e58074257d7fbb5b Mon Sep 17 00:00:00 2001 From: Tobias Burnus Date: Thu, 18 Oct 2018 21:35:34 +0200 Subject: Fix (re)alloc of polymorphic arrays PR fortran/87625 * trans-array.c (gfc_is_reallocatable_lhs): Detect allocatable polymorphic arrays. PR fortran/87625 * gfortran.dg/realloc_on_assign_31.f90: New file. From-SVN: r265283 --- gcc/fortran/ChangeLog | 6 ++++++ gcc/fortran/trans-array.c | 12 +++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) (limited to 'gcc/fortran') diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 13e3581..9ad52ca 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2018-10-18 Tobias Burnus + + PR fortran/87625 + * trans-array.c (gfc_is_reallocatable_lhs): Detect allocatable + polymorphic arrays. + 2018-10-18 Paul Thomas PR fortran/58618 diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index ea4cf8c..47fec13 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -9616,9 +9616,15 @@ gfc_is_reallocatable_lhs (gfc_expr *expr) if (sym->ts.type == BT_CLASS && !sym->attr.associate_var && CLASS_DATA (sym)->attr.allocatable - && expr->ref && expr->ref->type == REF_COMPONENT - && strcmp (expr->ref->u.c.component->name, "_data") == 0 - && expr->ref->next == NULL) + && expr->ref + && ((expr->ref->type == REF_ARRAY && expr->ref->u.ar.type == AR_FULL + && expr->ref->next == NULL) + || (expr->ref->type == REF_COMPONENT + && strcmp (expr->ref->u.c.component->name, "_data") == 0 + && (expr->ref->next == NULL + || (expr->ref->next->type == REF_ARRAY + && expr->ref->next->u.ar.type == AR_FULL + && expr->ref->next->next == NULL))))) return true; /* An allocatable variable. */ -- cgit v1.1