------- Comment #3 from pault at gcc dot gnu dot org 2008-01-17 10:12 ------- Fixed on trunk - see below for some remaining wrinkles, dug up by Tobias. I will keep this pR open until both are fixed.
Paul wrinkle #1: This one is easily fixed. Index: gcc/fortran/decl.c =================================================================== --- gcc/fortran/decl.c (révision 131592) +++ gcc/fortran/decl.c (copie de travail) @@ -2156,6 +2156,7 @@ after the specification statements. */ if (gfc_matching_function && !(len && len->expr_type != EXPR_VARIABLE + && len->expr_type != EXPR_CONSTANT && len->expr_type != EXPR_OP)) { gfc_undo_symbols (); module m integer, parameter :: l = 2 end module m program test implicit none integer, parameter :: l = 5 character(len=10) :: c c = f() contains character(len=l) function f() use m print *, len(f) ! if (len(f) /= 2) call abort ! gives 5 right now... f = "a" end function f end program test ! { dg-final { cleanup-modules "m" } } wrinkle #2: This one is proving to be a bit recalcitrant. module m character(2) :: l end module m implicit none ! character(4) :: l print *, f() contains character(len=len(l)) function f() use m f = "4" if (len(f)==2) f= "2" end function f end where 'l' is found to be ambiguous; this must arise because the first match of the length is leaving the symbol intact. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34429