re PR fortran/69398 ([OOP] ICE on class with duplicate dimension attribute specified)
authorSteven G. Kargl <kargl@gcc.gnu.org>
Wed, 19 Jun 2019 18:04:46 +0000 (18:04 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Wed, 19 Jun 2019 18:04:46 +0000 (18:04 +0000)
2019-06-19  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/69398
* decl.c (attr_decl): Check for duplicate DIMENSION attribute for a
CLASS entity.

2019-06-19  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/69398
* gfortran.dg/pr69398.f90: New test.

From-SVN: r272481

gcc/fortran/ChangeLog
gcc/fortran/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pr69398.f90 [new file with mode: 0644]

index 62edba7..2014342 100644 (file)
@@ -1,5 +1,11 @@
 2019-06-19  Steven G. Kargl  <kargl@gcc.gnu.org>
 
+       PR fortran/69398
+       * decl.c (attr_decl): Check for duplicate DIMENSION attribute for a
+       CLASS entity.
+
+2019-06-19  Steven G. Kargl  <kargl@gcc.gnu.org>
+
        PR fortran/87907
        * resolve.c (resolve_contained_fntype): Do not dereference a NULL
        pointer.
index 5fc06e4..7fcb60a 100644 (file)
@@ -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, &current_attr, &var_locus))
        {
          m = MATCH_ERROR;
index aa41d2a..5b81695 100644 (file)
@@ -1,5 +1,10 @@
 2019-06-19  Steven G. Kargl  <kargl@gcc.gnu.org>
 
+       PR fortran/69398
+       * gfortran.dg/pr69398.f90: New test.
+
+2019-06-19  Steven G. Kargl  <kargl@gcc.gnu.org>
+
        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 (file)
index 0000000..6863746
--- /dev/null
@@ -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
+