------- Comment #3 from pault at gcc dot gnu dot org 2008-01-11 10:13 -------
I have had a brief attempt to resolve this one and have driven my head against
a brick wall!
Starting with this development of the original testcase:
! Rejects-valid. Fails with gfortran 4.1, 4.2 and 4.3
! For 4.3 the error message is:
!
! (/ linem, nplam /) )
! 1
!Error: Invalid character in name at (1)
!
! Found using the Fortran Company Fortran 90 Test Suite (Lite),
! Version 1.4
module splitprms
integer, parameter :: nplam = 3 ! # of plans to expand TABs
integer, parameter :: linem = 3 ! max. line length
integer, parameter :: ncntm = 39 ! max. # cont. lines
integer, parameter, dimension (linem*nplam) :: check1 = &
[ max ([(i, i= 1,linem), (10*i, i= 1,linem)], &
[(6, i= 1, 2*linem) ]), [(i, i= 1,linem)]]
integer, parameter, dimension (linem, nplam) :: check2 = &
reshape (check1, [linem, nplam ])
integer, parameter, dimension (2) :: check3 = [linem, nplam ]
! This is OK!!!!!!!!!
integer, parameter, dimension (linem, nplam) :: check4 = &
reshape ([ max ([(i, i= 1,linem), (10*i, i= 1,linem)], &
[(6, i= 1, 2*linem) ]), [(i, i= 1,linem)]], &
check3 )
! This is not....
integer, parameter, dimension (linem, nplam) :: nxttab = &
reshape ([ max ([(i, i= 1,linem), (10*i, i= 1,linem)], &
[(6, i= 1, 2*linem) ]), [(i, i= 1,linem)]], &
[linem, nplam ])
! This is the original
integer, parameter, dimension (linem, nplam) :: nxttab2 = &
reshape ( &
(/max ((/(6+3*((i-6+3)/3), i= 1,linem), &
(6+2*((i-6+2)/2), i= 1,linem)/), &
(/(6, i= 1, 2*linem)/)), &
(/(i, i= 1,linem)/)/), (/ linem, nplam /) )
end module splitprms
Resolution of the 'reshape' function is being derailed for some reason by the
shape expression in gfc_simplify_reshape. However, simplifying this does not
do the job but adding a gfc_simplify_expr in gfc_get_array_element fixes this
problem but breaks everything else!
*sigh*
Paul
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34556