aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/fortran/data.c7
-rw-r--r--gcc/testsuite/gfortran.dg/parameter_data.f9013
2 files changed, 20 insertions, 0 deletions
diff --git a/gcc/fortran/data.c b/gcc/fortran/data.c
index 13e3506..25e9793 100644
--- a/gcc/fortran/data.c
+++ b/gcc/fortran/data.c
@@ -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
index 0000000..b95f9c9
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/parameter_data.f90
@@ -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