aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/frontend-passes.c
diff options
context:
space:
mode:
authorThomas Koenig <tkoenig@gcc.gnu.org>2017-06-10 10:07:13 +0000
committerThomas Koenig <tkoenig@gcc.gnu.org>2017-06-10 10:07:13 +0000
commitac39f0e831cee81e63b0d3a84d2ae6943b27ee5b (patch)
treea22801c65ba5677ad8e9e97936b0736f5610e9dc /gcc/fortran/frontend-passes.c
parent18787c384aba66221a157862c81238b9fea4e13d (diff)
downloadgcc-ac39f0e831cee81e63b0d3a84d2ae6943b27ee5b.zip
gcc-ac39f0e831cee81e63b0d3a84d2ae6943b27ee5b.tar.gz
gcc-ac39f0e831cee81e63b0d3a84d2ae6943b27ee5b.tar.bz2
re PR fortran/80988 (171_swim fails)
2017-06-10 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/80988 * frontend-passes.c (traverse_io_block): Also check for variables occurring as indices multiple time in a single implied DO loop. 2017-06-10 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/80988 * gfortran.dg/implied_do_io_3.f90: New test. From-SVN: r249092
Diffstat (limited to 'gcc/fortran/frontend-passes.c')
-rw-r--r--gcc/fortran/frontend-passes.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/gcc/fortran/frontend-passes.c b/gcc/fortran/frontend-passes.c
index 8fa1de1..11c7503 100644
--- a/gcc/fortran/frontend-passes.c
+++ b/gcc/fortran/frontend-passes.c
@@ -1164,7 +1164,16 @@ traverse_io_block (gfc_code *code, bool *has_reached, gfc_code *prev)
/* Check for (a(k), i=1,4) or ((a(j, i), i=1,4), j=1,4). */
if (!stack_top || !stack_top->iter
|| stack_top->iter->var->symtree != start->symtree)
- iters[i] = NULL;
+ {
+ /* Check for (a(i,i), i=1,3). */
+ int j;
+
+ for (j=0; j<i; j++)
+ if (iters[j] && iters[j]->var->symtree == start->symtree)
+ return false;
+
+ iters[i] = NULL;
+ }
else
{
iters[i] = stack_top->iter;