mirror of git://gcc.gnu.org/git/gcc.git
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
This commit is contained in:
parent
4be91498e2
commit
acd1559a0e
|
|
@ -1,3 +1,9 @@
|
|||
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-12 Thomas Koenig <tkoenig@gcc.gnu.org>
|
||||
|
||||
PR fortran/83064
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
2018-04-14 Thomas Koenig <tkoenig@gcc.gnu.org>
|
||||
|
||||
PR fortran/85387
|
||||
* gfortran.dg/implied_do_io_5.f90: New test.
|
||||
|
||||
2018-04-13 Paul A. Clarke <pc@us.ibm.com>
|
||||
|
||||
PR target/83402
|
||||
|
|
|
|||
|
|
@ -0,0 +1,15 @@
|
|||
! { dg-do run }
|
||||
! { dg-additional-options "-ffrontend-optimize" }
|
||||
! PR fortran/85387 - incorrect output
|
||||
! Original test case by Vittorio Zecca
|
||||
program main
|
||||
real :: efg_pw(2,2)
|
||||
character (len=80) :: c1, c2
|
||||
efg_pw(1,1)=1
|
||||
efg_pw(2,1)=2
|
||||
efg_pw(1,2)=3
|
||||
efg_pw(2,2)=4
|
||||
write (unit=c1,fmt='(3F12.5)') ((efg_pw(i, j), i=1, j), j=1, 2)
|
||||
write (unit=c2,fmt='(3F12.5)') 1.0, 3.0, 4.0
|
||||
if (c1 /= c2) stop 1
|
||||
end
|
||||
Loading…
Reference in New Issue