From: Mark Eggleston Date: Mon, 6 Jul 2020 06:14:59 +0000 (+0100) Subject: Fortran : Implicitly type parameter causes an invalid error PR96038 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=9ad19a66d751ab48515ef61f830e192ae4078b93;p=gcc.git Fortran : Implicitly type parameter causes an invalid error PR96038 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 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 gcc/testsuite/ PR fortran/96038 * gfortran.dg/pr96038.f90: New test. --- 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 +