Message ID | 4D94E40A.2060306@netcologne.de |
---|---|
State | New |
Headers | show |
On 03/31/2011 01:28 PM, Thomas Koenig wrote: > Hello world, > > the attached patch fixes a 4.7 regression, PR 48352, where a function > elimination in the expressions for a DO loop caused an ICE. The ICE was caused > by interaction of the expression walker with insertion of a statement for a DO > loop. > > Many thanks to Joost for finding the bug and reducing the test case. > > To fix the regression, I have disabled this particular optimization for > expressions within the loop control. > > I'd like to overhaul the way that statements are inserted during front end > optimization, later. This is needed for functions returning arrays with bounds > not known at compile-time anyway. > > Regression-tested. OK for trunk? > OK. Do you plan to open a second PR for this TODO? Thanks for patch, Jerry
Hi Jerry, >> Regression-tested. OK for trunk? >> > OK. Do you plan to open a second PR for this TODO? Sending fortran/ChangeLog Sending fortran/frontend-passes.c Sending testsuite/ChangeLog Adding testsuite/gfortran.dg/function_optimize_3.f90 Transmitting file data .... Committed revision 171849. I have opened PR 48405 to track the issue. Thanks for the review! Thomas
Index: frontend-passes.c =================================================================== --- frontend-passes.c (Revision 171793) +++ frontend-passes.c (Arbeitskopie) @@ -137,6 +137,13 @@ static int cfe_register_funcs (gfc_expr **e, int *walk_subtrees ATTRIBUTE_UNUSED, void *data ATTRIBUTE_UNUSED) { + + /* FIXME - there is a bug in the insertion code for DO loops. Bail + out here. */ + + if ((*current_code)->op == EXEC_DO) + return 0; + if ((*e)->expr_type != EXPR_FUNCTION) return 0;