Bil Kleb posted the following code on comp.lang.fortran on 2007/3/16; Richard Maine agreed that it is valid but pointed out that it's a consistent weak spot in many compilers. I tested it on GFortran, and it does indeed fail here.
debian-gfortran:~/test> more kleb1.f90 module kinds integer, parameter :: dp = selected_real_kind(15) end module kinds module test_undeclared_kind; contains REAL(DP) function declared_dp_before_defined() use kinds, only: dp declared_dp_before_defined = 1.0_dp end function end module debian-gfortran:~/test> ~/bin-trunk/bin/gfortran kleb1.f90 kleb1.f90:6.9: REAL(DP) function declared_dp_before_defined() 1 Error: Parameter 'dp' at (1) has not been declared or is a variable, which does not reduce to a constant expression [...] debian-gfortran:~/test> ~/bin-trunk/bin/gfortran --version GNU Fortran (GCC) 4.3.0 20070316 (experimental) -- Summary: kind parameter in function declaration fails to find use-associated parameters Product: gcc Version: 4.3.0 Status: UNCONFIRMED Keywords: rejects-valid Severity: normal Priority: P3 Component: fortran AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: brooks at gcc dot gnu dot org GCC host triplet: i686-pc-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31229