[Patch, Fortran] PR fortran/35846: ICE on character array constructor

Daniel Kraft d@domob.eu
Sat Sep 20 17:34:00 GMT 2008


Tobias Burnus wrote:
> Hi Daniel,
> 
> Daniel Kraft wrote:
>> this is a fix for PR fortran/35846 where character array constructor
>> ICEd in certain situations because gfc_conv_string_length could be
>> called with a charlength structure whose length was NULL. [...]
>>
>> After fixing the ICE, the problem with the global variables pointed out
>> broke bounds-checking for the tests, which I fixed by saving & restoring
>> their values.
> 
> I think you just made it more difficult to hit the bug rather than
> fully fixing the bug. If one adds another nested constructor one
> still gets:

Hi Tobias,

thanks for catching this one!  I'm not in my best testing shape today it 
seems...  But while I'm surely not in a position to claim the patch is 
right or correct, I still believe that the problem here was just that I 
missed to call flatten_array_ctors_without_strlen on the first 
constructor element when I took it out, so that in your example there 
still remained an array constructor in the "flattened" expression.

This is fixed with the new patch and your test compiles fine, too, and 
outputs the expected values.

The new patch is just regression testing.  What do you think about this 
one?  Or do you think the way this patch works is completely wrong and I 
should try to find another solution?  I just thought it would be the 
best idea to reuse the existing logic in gfc_conv_string_length for 
gfc_conv_expr_descriptor/gfc_conv_string_length.

Yours,
Daniel

> internal compiler error: in gfc_conv_array_constructor_expr,
>                          at fortran/trans-expr.c:3356
> 
> using the following program
> 
> implicit none
> character(len=3) :: c(3)
> c = 'a'
> c = (/ (/ 'A'//(/ trim(c(1)), 'a' /)/)//'c', 'dcd' /)
> print *, c(1)
> print *, c(2)
> print *, c(3)
> end
> 
> NAG f95 and ifort print for this program:
>  Aac
>  Aac
>  dcd

-- 
Done:     Arc-Bar-Cav-Sam-Val-Wiz, Dwa-Elf-Gno-Hum-Orc, Law-Neu-Cha, Fem-Mal
To go:    Hea-Kni-Mon-Pri-Ran-Rog-Tou
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: patch.changelog
URL: <http://gcc.gnu.org/pipermail/fortran/attachments/20080920/222736ac/attachment.ksh>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: patch.diff
URL: <http://gcc.gnu.org/pipermail/fortran/attachments/20080920/222736ac/attachment-0001.ksh>


More information about the Fortran mailing list