From: Harald Anlauf Date: Sat, 20 Jun 2020 14:05:13 +0000 (+0200) Subject: PR fortran/95587 - ICE in gfc_target_encode_expr, at fortran/target-memory.c:362 X-Git-Tag: upstream/12.2.0~15388 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5eb947601bdce59f2ff26694327ad173c51c2724;p=platform%2Fupstream%2Fgcc.git PR fortran/95587 - ICE in gfc_target_encode_expr, at fortran/target-memory.c:362 EQUIVALENCE objects are subject to constraints listed in the Fortran 2018 standard, section 8.10.1.1. These constraints are to be checked also for CLASS variables. gcc/fortran/ PR fortran/95587 * match.c (gfc_match_equivalence): Check constraints on EQUIVALENCE objects also for CLASS variables. --- diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c index 82d2b50..8063fca 100644 --- a/gcc/fortran/match.c +++ b/gcc/fortran/match.c @@ -5700,6 +5700,11 @@ gfc_match_equivalence (void) if (!gfc_add_in_equivalence (&sym->attr, sym->name, NULL)) goto cleanup; + if (sym->ts.type == BT_CLASS + && CLASS_DATA (sym) + && !gfc_add_in_equivalence (&CLASS_DATA (sym)->attr, + sym->name, NULL)) + goto cleanup; if (sym->attr.in_common) { diff --git a/gcc/testsuite/gfortran.dg/pr95587.f90 b/gcc/testsuite/gfortran.dg/pr95587.f90 new file mode 100644 index 0000000..a543fb9 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr95587.f90 @@ -0,0 +1,13 @@ +! { dg-do compile } +! PR fortran/95587 - ICE in gfc_target_encode_expr, at fortran/target-memory.c:362 + +program p + type t + end type t + class(*), allocatable :: x, y + class(t), allocatable :: u, v + class(t), pointer :: c, d + equivalence (x, y) ! { dg-error "conflicts with ALLOCATABLE" } + equivalence (u, v) ! { dg-error "conflicts with ALLOCATABLE" } + equivalence (c, d) ! { dg-error "conflicts with POINTER" } +end