Message ID | 7b66107b-4f8f-a361-7f88-915b147e2d4f@tkoenig.net |
---|---|
State | New |
Headers | show |
Series | [fortran] Fix PR 85387 | expand |
Hi Thomas, this looks good. Ok for trunk. Thanks for the patch. - Andre On Sat, 14 Apr 2018 13:35:37 +0200 Thomas König <tk@tkoenig.net> wrote: > Hello world, > > the attached patch fixes the PR, an 8 regression caused by > trying to convert a nested implied DO loop to an array > for a case where this was not possible. > > Regression-tested. OK for trunk? > > Regards > > Thomas > > 2018-04-14 Thomas Koenig <tkoenig@gcc.gnu.org> > > PR fortran/85387 > * frontend-passes.c (traverse_io_block): Check for start, end or > stride being defined by an outer implied DO loop. > > 2018-04-14 Thomas Koenig <tkoenig@gcc.gnu.org> > > PR fortran/85387 > * gfortran.dg/implied_do_io_5.f90: New test.
Hi Andre,
> this looks good. Ok for trunk. Thanks for the patch.
Committed as r259384. Thanks for the quick review!
Looking at the serious regressions from the gcc home page,
we are fast approaching the gcc 8 release. Serious regressions
are below 100, and there are currently only
So, if anybody has any bugs that should urgently be fixed
for the release, please go ahead :-)
Regards
Thomas
Index: frontend-passes.c =================================================================== --- frontend-passes.c (Revision 259222) +++ frontend-passes.c (Arbeitskopie) @@ -1237,6 +1237,23 @@ traverse_io_block (gfc_code *code, bool *has_reach } } + /* Check for cases like ((a(i, j), i=1, j), j=1, 2). */ + for (int i = 1; i < ref->u.ar.dimen; i++) + { + if (iters[i]) + { + gfc_expr *var = iters[i]->var; + for (int j = i - 1; j < i; j++) + { + if (iters[j] + && (gfc_check_dependency (var, iters[j]->start, true) + || gfc_check_dependency (var, iters[j]->end, true) + || gfc_check_dependency (var, iters[j]->step, true))) + return false; + } + } + } + /* Create new expr. */ new_e = gfc_copy_expr (curr->expr1); new_e->expr_type = EXPR_VARIABLE;