summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormpolacek <mpolacek@138bc75d-0d04-0410-961f-82ee72b054a4>2013-10-21 18:40:34 +0000
committermpolacek <mpolacek@138bc75d-0d04-0410-961f-82ee72b054a4>2013-10-21 18:40:34 +0000
commit3a8ab6ab69e63a60cc27eb5dae223596a9d2bfe5 (patch)
treef83f28779503ada6baf211f13e425689117569ca
parent473bcb8e6989069c0c201b204a03f5af1143f9f4 (diff)
downloadgcc-3a8ab6ab69e63a60cc27eb5dae223596a9d2bfe5.tar.gz
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@203907 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/fold-const.c10
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/gomp/pr58809.c13
4 files changed, 31 insertions, 3 deletions
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 <polacek@redhat.com>
+
+ 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 <rdsandiford@googlemail.com>
* 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 <polacek@redhat.com>
+
+ PR middle-end/58809
+ * gcc.dg/gomp/pr58809.c: New test.
+
2013-10-21 Vidya Praveen <vidyapraveen@arm.com>
* 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)
+ ;
+}