Fortran : Implicitly type parameter causes an invalid error PR96038
authorMark Eggleston <markeggleston@gcc.gnu.org>
Mon, 6 Jul 2020 06:14:59 +0000 (07:14 +0100)
committerMark Eggleston <markeggleston@gcc.gnu.org>
Tue, 14 Jul 2020 06:16:56 +0000 (07:16 +0100)
If a paramter to declared and initialised before its type is
declared a bogus error is output at the type declaration
idicating that initialisation is missing.

2020-07-14  Steven G. Kargl  <kargl@gcc.gnu.org>

gcc/fortran/

PR fortran/96038
* decl.c (add_init_expr_sym):  For a symbol that is a
parameter accept an initialisation if it does not have a
value otherwise output a error and reject.

2020-07-14  Mark Eggleston  <markeggleston@gcc.gnu.org>

gcc/testsuite/

PR fortran/96038
* gfortran.dg/pr96038.f90: New test.

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

index 52c2a624b6e31608671a9ce9cafbda67f186d181..d854b2a0307733bc9ea5af01d239f2e97b1fa381 100644 (file)
@@ -1889,13 +1889,16 @@ add_init_expr_to_sym (const char *name, gfc_expr **initp, locus *var_locus)
 
   /* If this symbol is confirming an implicit parameter type,
      then an initialization expression is not allowed.  */
-  if (attr.flavor == FL_PARAMETER
-      && sym->value != NULL
-      && *initp != NULL)
+  if (attr.flavor == FL_PARAMETER && sym->value != NULL)
     {
-      gfc_error ("Initializer not allowed for PARAMETER %qs at %C",
-                sym->name);
-      return false;
+      if (*initp != NULL)
+       {
+         gfc_error ("Initializer not allowed for PARAMETER %qs at %C",
+                    sym->name);
+         return false;
+       }
+      else
+       return true;
     }
 
   if (init == NULL)
diff --git a/gcc/testsuite/gfortran.dg/pr96038.f90 b/gcc/testsuite/gfortran.dg/pr96038.f90
new file mode 100644 (file)
index 0000000..f1098f3
--- /dev/null
@@ -0,0 +1,8 @@
+! { dg-do compile }
+
+function ifoo()
+  parameter (n = 50)
+  integer n
+  ifoo = n
+end
+