diff options
author | Thomas Koenig <tkoenig@gcc.gnu.org> | 2018-04-14 13:38:41 +0000 |
---|---|---|
committer | Thomas Koenig <tkoenig@gcc.gnu.org> | 2018-04-14 13:38:41 +0000 |
commit | acd1559a0e07edca7e130e5fbc2d230ac8ba841c (patch) | |
tree | b09d0087989a89f838fae83355f4777bdf39ea57 /gcc/fortran/frontend-passes.c | |
parent | 4be91498e272b823f627097cdcb10c7f893e2942 (diff) | |
download | gcc-acd1559a0e07edca7e130e5fbc2d230ac8ba841c.zip gcc-acd1559a0e07edca7e130e5fbc2d230ac8ba841c.tar.gz gcc-acd1559a0e07edca7e130e5fbc2d230ac8ba841c.tar.bz2 |
re PR fortran/85387 (incorrect output with optimization /= 0)
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.
From-SVN: r259384
Diffstat (limited to 'gcc/fortran/frontend-passes.c')
-rw-r--r-- | gcc/fortran/frontend-passes.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/gcc/fortran/frontend-passes.c b/gcc/fortran/frontend-passes.c index 6888224..40e88b1 100644 --- a/gcc/fortran/frontend-passes.c +++ b/gcc/fortran/frontend-passes.c @@ -1237,6 +1237,23 @@ traverse_io_block (gfc_code *code, bool *has_reached, gfc_code *prev) } } + /* 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; |