]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR fortran/49278 - ICE when combining DATA with default initialization
authorHarald Anlauf <anlauf@gmx.de>
Mon, 8 Mar 2021 20:59:20 +0000 (21:59 +0100)
committerHarald Anlauf <anlauf@gmx.de>
Mon, 8 Mar 2021 20:59:20 +0000 (21:59 +0100)
A variable with the PARAMETER attribute may not appear in a DATA statement.

gcc/fortran/ChangeLog:

PR fortran/49278
* data.c (gfc_assign_data_value): Reject variable with PARAMETER
attribute in DATA statement.

gcc/testsuite/ChangeLog:

PR fortran/49278
* gfortran.dg/parameter_data.f90: New test.

gcc/fortran/data.c
gcc/testsuite/gfortran.dg/parameter_data.f90 [new file with mode: 0644]

index 13e3506dd1e8a9dea567aa18594df351511887ab..25e9793016988a8e9fb2b05ec3cf4fb83e8d116e 100644 (file)
@@ -244,6 +244,13 @@ gfc_assign_data_value (gfc_expr *lvalue, gfc_expr *rvalue, mpz_t index,
                    "array-element nor a scalar-structure-component";
 
   symbol = lvalue->symtree->n.sym;
+  if (symbol->attr.flavor == FL_PARAMETER)
+    {
+      gfc_error ("PARAMETER %qs shall not appear in a DATA statement at %L",
+                symbol->name, &lvalue->where);
+      return false;
+    }
+
   init = symbol->value;
   last_ts = &symbol->ts;
   last_con = NULL;
diff --git a/gcc/testsuite/gfortran.dg/parameter_data.f90 b/gcc/testsuite/gfortran.dg/parameter_data.f90
new file mode 100644 (file)
index 0000000..b95f9c9
--- /dev/null
@@ -0,0 +1,13 @@
+! { dg-do compile }
+! PR fortran/49278 - ICE when combining DATA with default initialization
+
+program p
+  implicit none
+  type t
+     real :: a
+  end type t
+  integer, parameter :: b = 42
+  type(t), parameter :: z = t(4.0)
+  data b   / 666 / ! { dg-error "shall not appear in a DATA statement" }
+  data z%a / 3.0 / ! { dg-error "shall not appear in a DATA statement" }
+end