When an specification statement in a BLOCK construct has a PARAMETER attribute, gfortran currently discards the entity. This patch marks PARAMETER entity if in a BLOCK. I'm not complete convince that this is the right fix, but it does allow the testcase to compile and run. Built and tested on x86_64-*-freebsd. OK to commit (if not no one has a better patch)?
2015-10-26 Steven G. Kargl <ka...@gcc.gnu.org> PR fortran/67885 * trans-decl.c (generate_local_decl): Mark PARAMETER entities in BLOCK construct. 2015-10-26 Steven G. Kargl <ka...@gcc.gnu.org> PR fortran/67885 * gfortran.dg/pr67885.f90: New test. -- Steve
Index: gcc/fortran/trans-decl.c =================================================================== --- gcc/fortran/trans-decl.c (revision 229390) +++ gcc/fortran/trans-decl.c (working copy) @@ -5217,6 +5217,16 @@ generate_local_decl (gfc_symbol * sym) "Unused parameter %qs which has been explicitly " "imported at %L", sym->name, &sym->declared_at); } + + if (sym->ns + && sym->ns->parent + && sym->ns->parent->code + && sym->ns->parent->code->op == EXEC_BLOCK) + { + if (sym->attr.referenced) + gfc_get_symbol_decl (sym); + sym->mark = 1; + } } else if (sym->attr.flavor == FL_PROCEDURE) { Index: gcc/testsuite/gfortran.dg/pr67885.f90 =================================================================== --- gcc/testsuite/gfortran.dg/pr67885.f90 (revision 0) +++ gcc/testsuite/gfortran.dg/pr67885.f90 (working copy) @@ -0,0 +1,12 @@ +! { dg-do run } +! PR fortran/67885 +! Original code contributed by Gerhard Steinmetz +! gerhard dot steinmetz dot fortran at t-online dot de +program p + block + integer, parameter :: a(2) = [1, 2] + integer :: x(2) + x = a + if (x(1) /= 1) call abort + end block +end