From: Steven G. Kargl Date: Wed, 19 Jun 2019 18:04:46 +0000 (+0000) Subject: re PR fortran/69398 ([OOP] ICE on class with duplicate dimension attribute specified) X-Git-Tag: upstream/12.2.0~23823 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c9935123aef8eac547cdd0e8b06811fc776a6b32;p=platform%2Fupstream%2Fgcc.git re PR fortran/69398 ([OOP] ICE on class with duplicate dimension attribute specified) 2019-06-19 Steven G. Kargl PR fortran/69398 * decl.c (attr_decl): Check for duplicate DIMENSION attribute for a CLASS entity. 2019-06-19 Steven G. Kargl PR fortran/69398 * gfortran.dg/pr69398.f90: New test. From-SVN: r272481 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 62edba7..2014342 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,5 +1,11 @@ 2019-06-19 Steven G. Kargl + PR fortran/69398 + * decl.c (attr_decl): Check for duplicate DIMENSION attribute for a + CLASS entity. + +2019-06-19 Steven G. Kargl + PR fortran/87907 * resolve.c (resolve_contained_fntype): Do not dereference a NULL pointer. diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index 5fc06e4..7fcb60a 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 sets 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 aa41d2a..5b81695 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2019-06-19 Steven G. Kargl + PR fortran/69398 + * gfortran.dg/pr69398.f90: New test. + +2019-06-19 Steven G. Kargl + PR fortran/87907 * gfortran.dg/pr87907.f90: New testcase. diff --git a/gcc/testsuite/gfortran.dg/pr69398.f90 b/gcc/testsuite/gfortran.dg/pr69398.f90 new file mode 100644 index 0000000..6863746 --- /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 +