This is the mail archive of the fortran@gcc.gnu.org mailing list for the GNU Fortran 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]

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


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


Attachment: select_character.diff
Description: Binary data


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