re PR fortran/68440 ([OOP] ICE on declaring class variable with wrong attribute)
authorJanus Weil <janus@gcc.gnu.org>
Tue, 8 Nov 2016 22:07:21 +0000 (23:07 +0100)
committerJanus Weil <janus@gcc.gnu.org>
Tue, 8 Nov 2016 22:07:21 +0000 (23:07 +0100)
2016-11-08  Janus Weil  <janus@gcc.gnu.org>

PR fortran/68440
* expr.c (check_alloc_comp_init): Loosen an assert.
* resolve.c (resolve_fl_parameter): Reject class parameters.

2016-11-08  Janus Weil  <janus@gcc.gnu.org>

PR fortran/68440
* gfortran.dg/class_58.f90: New test.

From-SVN: r241979

gcc/fortran/ChangeLog
gcc/fortran/expr.c
gcc/fortran/resolve.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/class_58.f90 [new file with mode: 0644]

index d3c16994ccac7f5fac248234e92d459d94a8e023..499c3d4c4e340d09ee3457bb1ad4769c46421354 100644 (file)
@@ -1,3 +1,9 @@
+2016-11-08  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/68440
+       * expr.c (check_alloc_comp_init): Loosen an assert.
+       * resolve.c (resolve_fl_parameter): Reject class parameters.
+
 2016-11-08  Janus Weil  <janus@gcc.gnu.org>
 
        PR fortran/77596
index f059c3c1efa6acb8e5d36e77bab055425cd0001e..b2ffaae246a69bf39d93c6cd5a8116a205d1d8d8 100644 (file)
@@ -2206,7 +2206,7 @@ check_alloc_comp_init (gfc_expr *e)
   gfc_constructor *ctor;
 
   gcc_assert (e->expr_type == EXPR_STRUCTURE);
-  gcc_assert (e->ts.type == BT_DERIVED);
+  gcc_assert (e->ts.type == BT_DERIVED || e->ts.type == BT_CLASS);
 
   for (comp = e->ts.u.derived->components,
        ctor = gfc_constructor_first (e->value.constructor);
index 3a4dd1f77e68c515d22374e027462ae7a99ed148..f4d346ed0f312e576ae2d76f52db961d2e87ebe8 100644 (file)
@@ -14001,6 +14001,15 @@ resolve_fl_parameter (gfc_symbol *sym)
                 &sym->value->where);
       return false;
     }
+
+  /* F03:C509,C514.  */
+  if (sym->ts.type == BT_CLASS)
+    {
+      gfc_error ("CLASS variable %qs at %L cannot have the PARAMETER attribute",
+                sym->name, &sym->declared_at);
+      return false;
+    }
+
   return true;
 }
 
index 05159aa410846b0eb8f874b3e4ca076ece2540dc..2b561e817b02d01d68ec02478bc18377ac5fd9bf 100644 (file)
@@ -1,3 +1,8 @@
+2016-11-08  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/68440
+       * gfortran.dg/class_58.f90: New test.
+
 2016-11-08  Uros Bizjak  <ubizjak@gmail.com>
 
        PR target/70799
diff --git a/gcc/testsuite/gfortran.dg/class_58.f90 b/gcc/testsuite/gfortran.dg/class_58.f90
new file mode 100644 (file)
index 0000000..20b601a
--- /dev/null
@@ -0,0 +1,13 @@
+! { dg-do compile }
+!
+! PR 68440: [OOP] ICE on declaring class variable with wrong attribute
+!
+! Contributed by Gerhard Steinmetz <gerhard.steinmetz.fortran@t-online.de>
+
+subroutine s
+  type t
+  end type
+  class(t), parameter :: x = t()  ! { dg-error "cannot have the PARAMETER attribute" }
+  class(t), parameter :: y = x    ! { dg-error "cannot have the PARAMETER attribute" }
+  class(t) :: z = x               ! { dg-error "must be dummy, allocatable or pointer" }
+end