Commit 4f83d583 by Thomas Koenig

re PR fortran/60522 (WHERE construct causes an ICE in gfc_trans_where_2)

2014-04-27  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR fortran/60522
	* frontend-passes.c (cfe_code):  Do not walk subtrees
	for WHERE.

2014-04-27  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR fortran/60522
	* gfortran.dg/where_4.f90:  New test case.

From-SVN: r208883
parent 6788164b
2014-04-27 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/60522
* frontend-passes.c (cfe_code): Do not walk subtrees
for WHERE.
2014-03-27 Tobias Burnus <burnus@net-b.de>
PR fortran/58880
......
......@@ -627,12 +627,35 @@ cfe_expr_0 (gfc_expr **e, int *walk_subtrees,
to insert statements as needed. */
static int
cfe_code (gfc_code **c, int *walk_subtrees ATTRIBUTE_UNUSED,
void *data ATTRIBUTE_UNUSED)
cfe_code (gfc_code **c, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
{
current_code = c;
inserted_block = NULL;
changed_statement = NULL;
/* Do not do anything inside a WHERE statement; scalar assignments, BLOCKs
and allocation on assigment are prohibited inside WHERE, and finally
masking an expression would lead to wrong-code when replacing
WHERE (a>0)
b = sum(foo(a) + foo(a))
END WHERE
with
WHERE (a > 0)
tmp = foo(a)
b = sum(tmp + tmp)
END WHERE
*/
if ((*c)->op == EXEC_WHERE)
{
*walk_subtrees = 0;
return 0;
}
return 0;
}
......
2014-04-27 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/60522
* gfortran.dg/where_4.f90: New test case.
2014-03-27 Tobias Burnus <burnus@net-b.de>
PR fortran/58880
......
! { dg-do compile }
! PR 60522 - this used to ICE.
! Original test case Roger Ferrer Ibanez
subroutine foo(a, b)
implicit none
integer, dimension(:), intent(inout) :: a
integer, dimension(:), intent(in) :: b
where (b(:) > 0)
where (b(:) > 100)
a(lbound(a, 1):ubound(a, 1)) = b(lbound(b, 1):ubound(b, 1)) * b(lbound(b, 1):ubound(b, 1)) - 100
elsewhere
a(lbound(a, 1):ubound(a, 1)) = b(lbound(b, 1):ubound(b, 1)) * b(lbound(b, 1):ubound(b, 1))
end where
elsewhere
a(lbound(a, 1):ubound(a, 1)) = - b(lbound(b, 1):ubound(b, 1)) * b(lbound(b, 1):ubound(b, 1))
end where
end subroutine foo
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment