diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index 52c2a624b6e..d854b2a0307 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -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 index 00000000000..f1098f33c1b --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr96038.f90 @@ -0,0 +1,8 @@ +! { dg-do compile } + +function ifoo() + parameter (n = 50) + integer n + ifoo = n +end +