Cheers to anyone who can crash my character-SELECT patch!

FX Coudert fxcoudert@gmail.com
Wed Jul 4 13:27:00 GMT 2007


Hi all,

The patch attached is a partial rewrite of the translation of SELECT  
for character types. I'd be very interested to see what people can  
throw at it, and whether it handles it. I don't have a widely  
creative imagination, so I think it would be good to have other  
people helping me on this. (Plus, it's a good thing for those readers  
who would like to do something for gfortran but don't actually have  
time to sink into the compiler itself). Moreover, the current  
testsuite doesn't test character SELECT, AFAICT. So, all testcases  
and crashtests are welcome!

And now, the story behind the motivation for this reworking: I've  
worked on bit this afternoon on rewriting the way we translate SELECT  
for character types. Currently, we generate a blocks of code for each  
case, along with a label and a list of the cases; a library function  
is called and it returns the address of the label that we will jump  
to. This use of jumps (GOTO_EXPR) is apparently hard on the middle- 
end (probably causing missed-optimizations, and at least preventing  
it to correctly understand what variables are initialized: see PR  
32035). Andrew Pinski suggested that we can use a SWITCH_EXPR instead  
(thanks Andrew for the analysis!). This is what my patch does, by  
assiging an integer value to each case, making the library function  
return an integer value and using a switch to select the appropriate  
code block to execute.

Thanks in advance for your help !
FX


-------------- next part --------------
A non-text attachment was scrubbed...
Name: select_character.diff
Type: application/octet-stream
Size: 4988 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/fortran/attachments/20070704/ce38380a/attachment.obj>


More information about the Fortran mailing list