From 1e08df0e054341a079e516e1957c8ca8148f916b Mon Sep 17 00:00:00 2001 From: Marek Polacek Date: Mon, 21 Oct 2013 18:40:34 +0000 Subject: [PATCH] re PR middle-end/58809 (ICE with complex variable in OpenMP reduction clause) PR middle-end/58809 * fold-const.c (fold_range_test): Return 0 if the type is not an integral type. testsuite/ * gcc.dg/gomp/pr58809.c: New test. From-SVN: r203907 --- gcc/ChangeLog | 6 ++++++ gcc/fold-const.c | 10 +++++++--- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/gomp/pr58809.c | 13 +++++++++++++ 4 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/gomp/pr58809.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e34ff7bd92f..d00105df9fb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2013-10-21 Marek Polacek + + PR middle-end/58809 + * fold-const.c (fold_range_test): Return 0 if the type is not + an integral type. + 2013-10-21 Richard Sandiford * system.h: Move hwint.h include further down. diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 2c2b929d6e2..021d670acf0 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -4970,12 +4970,16 @@ fold_range_test (location_t loc, enum tree_code code, tree type, int in0_p, in1_p, in_p; tree low0, low1, low, high0, high1, high; bool strict_overflow_p = false; - tree lhs = make_range (op0, &in0_p, &low0, &high0, &strict_overflow_p); - tree rhs = make_range (op1, &in1_p, &low1, &high1, &strict_overflow_p); - tree tem; + tree tem, lhs, rhs; const char * const warnmsg = G_("assuming signed overflow does not occur " "when simplifying range test"); + if (!INTEGRAL_TYPE_P (type)) + return 0; + + lhs = make_range (op0, &in0_p, &low0, &high0, &strict_overflow_p); + rhs = make_range (op1, &in1_p, &low1, &high1, &strict_overflow_p); + /* If this is an OR operation, invert both sides; we will invert again at the end. */ if (or_op) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b9926c8f3f3..fca2bb4b1ac 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-10-21 Marek Polacek + + PR middle-end/58809 + * gcc.dg/gomp/pr58809.c: New test. + 2013-10-21 Vidya Praveen * gcc.dg/20050922-1.c: Remove stdlib.h and declare abort(). diff --git a/gcc/testsuite/gcc.dg/gomp/pr58809.c b/gcc/testsuite/gcc.dg/gomp/pr58809.c new file mode 100644 index 00000000000..5dc02f65aa8 --- /dev/null +++ b/gcc/testsuite/gcc.dg/gomp/pr58809.c @@ -0,0 +1,13 @@ +/* PR middle-end/58809 */ +/* { dg-do compile } */ +/* { dg-options "-fopenmp -O" } */ + +int i; +#pragma omp threadprivate (i) + +void foo() +{ + _Complex int j; +#pragma omp parallel copyin (i) reduction (&&:j) + ; +} -- 2.30.2