This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug fortran/34429] Fails: character(len=use_associated_const) function foo()



------- 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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]