]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
fortran: [PR102595]
authorJerry DeLisle <jvdelisle@gcc.gnu.org>
Sat, 21 Jan 2023 23:19:57 +0000 (15:19 -0800)
committerJerry DeLisle <jvdelisle@gcc.gnu.org>
Sat, 21 Jan 2023 23:23:19 +0000 (15:23 -0800)
PR fortran/102595

gcc/fortran/ChangeLog:

* data.cc (gfc_assign_data_value): Remove check for PARAMETER in DATA.
* primary.cc (match_variable): Add check for PARAMETER in DATA.

gcc/testsuite/ChangeLog:

* gfortran.dg/pr88048.f90: Adjust for changed error message.
* gfortran.dg/parameter_data0.f90: New test.

gcc/fortran/data.cc
gcc/fortran/primary.cc
gcc/testsuite/gfortran.dg/parameter_data0.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/pr88048.f90

index 443d35da9cf163aca7a53a643fb90f2453077b43..d29eb12c1b16a7bc11d7b3ed54c372b4c8e16530 100644 (file)
@@ -244,13 +244,6 @@ 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;
index 543d9cc0de4388db5238c9207fb751e9932d500f..28ce5fea8656b8af4153381bb72e7abf29d5fc8e 100644 (file)
@@ -4076,8 +4076,14 @@ match_variable (gfc_expr **result, int equiv_flag, int host_flag)
          gfc_error ("Named constant at %C in an EQUIVALENCE");
          return MATCH_ERROR;
        }
-      /* Otherwise this is checked for and an error given in the
-        variable definition context checks.  */
+      if (gfc_in_match_data())
+       {
+         gfc_error ("PARAMETER %qs shall not appear in a DATA statement at %C",
+                     sym->name);
+         return MATCH_ERROR;
+       }
+       /* Otherwise this is checked for an error given in the
+          variable definition context checks.  */
       break;
 
     case FL_PROCEDURE:
diff --git a/gcc/testsuite/gfortran.dg/parameter_data0.f90 b/gcc/testsuite/gfortran.dg/parameter_data0.f90
new file mode 100644 (file)
index 0000000..4f1da9e
--- /dev/null
@@ -0,0 +1,6 @@
+! { dg-do compile }
+! PR fortran/102595  Similar to 88048 with a zero sized array
+program p
+   complex, parameter:: x(0) = 2
+   data x%im /3.0/ ! { dg-error "shall not appear in a DATA statement" }
+end
index 112939343309b52a1cabb3b0a5ee64bcb6fd2e82..ad82d45881c69f33aeac00f7bf59fb904f9d6721 100644 (file)
@@ -2,6 +2,6 @@
 ! PR fortran/88048
 program p
    integer, parameter :: a(2) = 1
-   data a(2) /a(1)/                 ! { dg-error "definable entity" }
+   data a(2) /a(1)/  ! { dg-error "shall not appear in a DATA statement" }
    print *, a
 end