re PR fortran/46753 (ICE: OpenMP - in extract_omp_for_data, at omp-low.c:335)

PR fortran/46753
	* trans-openmp.c (gfc_trans_omp_do): Use build2_loc instead of
	fold_build2_loc for OMP_FOR conditions.

	* libgomp.fortran/pr46753.f90: New test.

From-SVN: r167372
This commit is contained in:
Jakub Jelinek 2010-12-02 15:37:20 +01:00 committed by Jakub Jelinek
parent 4c698cf891
commit edaadf74d4
4 changed files with 34 additions and 7 deletions

View file

@ -1,3 +1,9 @@
2010-12-02 Jakub Jelinek <jakub@redhat.com>
PR fortran/46753
* trans-openmp.c (gfc_trans_omp_do): Use build2_loc instead of
fold_build2_loc for OMP_FOR conditions.
2010-11-30 Janne Blomqvist <jb@gcc.gnu.org>
PR fortran/28105

View file

@ -1262,10 +1262,10 @@ gfc_trans_omp_do (gfc_code *code, stmtblock_t *pblock,
if (simple)
{
TREE_VEC_ELT (init, i) = build2_v (MODIFY_EXPR, dovar, from);
TREE_VEC_ELT (cond, i) = fold_build2_loc (input_location, simple > 0
? LE_EXPR : GE_EXPR,
boolean_type_node, dovar,
to);
/* The condition should not be folded. */
TREE_VEC_ELT (cond, i) = build2_loc (input_location, simple > 0
? LE_EXPR : GE_EXPR,
boolean_type_node, dovar, to);
TREE_VEC_ELT (incr, i) = fold_build2_loc (input_location, PLUS_EXPR,
type, dovar, step);
TREE_VEC_ELT (incr, i) = fold_build2_loc (input_location,
@ -1290,9 +1290,10 @@ gfc_trans_omp_do (gfc_code *code, stmtblock_t *pblock,
count = gfc_create_var (type, "count");
TREE_VEC_ELT (init, i) = build2_v (MODIFY_EXPR, count,
build_int_cst (type, 0));
TREE_VEC_ELT (cond, i) = fold_build2_loc (input_location, LT_EXPR,
boolean_type_node,
count, tmp);
/* The condition should not be folded. */
TREE_VEC_ELT (cond, i) = build2_loc (input_location, LT_EXPR,
boolean_type_node,
count, tmp);
TREE_VEC_ELT (incr, i) = fold_build2_loc (input_location, PLUS_EXPR,
type, count,
build_int_cst (type, 1));

View file

@ -1,5 +1,8 @@
2010-12-02 Jakub Jelinek <jakub@redhat.com>
PR fortran/46753
* libgomp.fortran/pr46753.f90: New test.
PR libgomp/43706
* env.c (initialize_env): Default to spin count 300000
instead of 20000000 if neither OMP_WAIT_POLICY nor GOMP_SPINCOUNT

View file

@ -0,0 +1,17 @@
! PR fortran/46753
! { dg-do run }
integer :: i, j
j = 0
!$omp parallel do reduction(+:j)
do i = 2147483636, 2147483646
j = j + 1
end do
if (j.ne.11) call abort
j = 0
!$omp parallel do reduction(+:j)
do i = -2147483637, -2147483647, -1
j = j + 1
end do
if (j.ne.11) call abort
end