From: Steven G. Kargl Date: Thu, 20 Jun 2019 23:27:13 +0000 (+0000) Subject: backport: re PR fortran/69398 ([OOP] ICE on class with duplicate dimension attribute... X-Git-Tag: releases/gcc-9.2.0~223 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3beb78027244b69fe18219d84a658220fa478194;p=thirdparty%2Fgcc.git backport: re PR fortran/69398 ([OOP] ICE on class with duplicate dimension attribute specified) 2019-06-20 Steven G. Kargl Backport from mainline PR fortran/69398 * decl.c (attr_decl): Check for duplicate DIMENSION attribute for a CLASS entity. 2019-06-20 Steven G. Kargl Backport from mainline PR fortran/69398 * gfortran.dg/pr69398.f90: New test. From-SVN: r272530 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 087a1fd86fd9..0395a1a7abc9 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2019-06-20 Steven G. Kargl + + Backport from mainline + PR fortran/69398 + * decl.c (attr_decl): Check for duplicate DIMENSION attribute for a + CLASS entity. + 2019-06-20 Steven G. Kargl Backport from mainline diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index 1c785a4f74c8..a005bd7962b4 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -8372,6 +8372,15 @@ attr_decl1 (void) to the first component, or '_data' field. */ if (sym->ts.type == BT_CLASS && sym->ts.u.derived->attr.is_class) { + /* gfc_set_array_spec set sym->attr not CLASS_DATA(sym)->attr. Check + for duplicate attribute here. */ + if (CLASS_DATA(sym)->attr.dimension == 1 && as) + { + gfc_error ("Duplicate DIMENSION attribute at %C"); + m = MATCH_ERROR; + goto cleanup; + } + if (!gfc_copy_attr (&CLASS_DATA(sym)->attr, ¤t_attr, &var_locus)) { m = MATCH_ERROR; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7e17f67bf2dc..f42fe5887e63 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2019-06-20 Steven G. Kargl + + Backport from mainline + PR fortran/69398 + * gfortran.dg/pr69398.f90: New test. + 2019-06-20 Steven G. Kargl Backport from mainline diff --git a/gcc/testsuite/gfortran.dg/pr69398.f90 b/gcc/testsuite/gfortran.dg/pr69398.f90 new file mode 100644 index 000000000000..686374650489 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr69398.f90 @@ -0,0 +1,11 @@ +! { dg-do compile } +! PR fortran/69398 +! Contributed by Gerhard Steinmetz +program p + type t + end type + class(t), allocatable :: z(:) + target :: z(:) ! { dg-error "Duplicate DIMENSION attribute" } + allocate (z(2)) +end +