[Bug fortran/31213] ICE on valid code with gfortran
pault at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Sat Nov 17 17:18:00 GMT 2007
------- Comment #8 from pault at gcc dot gnu dot org 2007-11-17 17:18 -------
(In reply to comment #7)
> Ah! ubound.51 is not declared anywhere in spec_test.
This comes about because the character length for 'tricky' depends on a
characteristic of a variable, declared in tricky, that is not a dummy argument.
This is the nub of PR 33998 and I propose to transfer that part of this PR to
33998.
As well as the fix of #6, this PR needs a bit more:
The testcase below fails with....
/cygdrive/c/DOCUME~1/ADMINI~1/LOCALS~1/Temp/ccPP5t7g.o:pr31213.f90:(.tex
: undefined reference to `____MOD_i'
/cygdrive/c/DOCUME~1/ADMINI~1/LOCALS~1/Temp/ccPP5t7g.o:pr31213.f90:(.tex
: undefined reference to `____MOD_i'
/cygdrive/c/DOCUME~1/ADMINI~1/LOCALS~1/Temp/ccPP5t7g.o:pr31213.f90:(.tex
: undefined reference to `____MOD_i'
/cygdrive/c/DOCUME~1/ADMINI~1/LOCALS~1/Temp/ccPP5t7g.o:pr31213.f90:(.tex
: undefined reference to `____MOD_i'
/cygdrive/c/DOCUME~1/ADMINI~1/LOCALS~1/Temp/ccPP5t7g.o:pr31213.f90:(.tex
: undefined reference to `____MOD_i'
/cygdrive/c/DOCUME~1/ADMINI~1/LOCALS~1/Temp/ccPP5t7g.o:pr31213.f90:(.tex
: more undefined references to `____MOD_i' follow
collect2: ld returned 1 exit status
whereas the commented out line works. Evidently, something is awry with the
referencing in array_constructor translation.
Paul
module spec_xpr
contains
pure function tricky(ugly, j, lb)
integer, intent(in) :: j
logical, intent(in) :: lb(:)
interface yoagly
pure function ugly(n)
integer, intent(in) :: n
complex ugly(n)
end function ugly
end interface yoagly
! character(tricky_helper(lb)) tricky
character(tricky_helper((/(.true., i = 1, j)/))) tricky
tricky = repeat('X',len(tricky))
end function tricky
pure function tricky_helper(lb)
logical, intent(in) :: lb(:)
integer tricky_helper
tricky_helper = 2*size(lb)+3
end function tricky_helper
end module spec_xpr
module xtra_fun
contains
pure function butt_ugly(n)
integer, intent(in) :: n
complex butt_ugly(n)
butt_ugly = cmplx(0.,0.)
end function butt_ugly
end module xtra_fun
program spec_test
use spec_xpr
use xtra_fun
print *, tricky(butt_ugly,5,(/(.TRUE.,i = 1, 5)/))
end program spec_test
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31213
More information about the Gcc-bugs
mailing list