]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR middle-end/58809 (ICE with complex variable in OpenMP reduction clause)
authorJakub Jelinek <jakub@redhat.com>
Wed, 7 May 2014 16:11:42 +0000 (18:11 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 7 May 2014 16:11:42 +0000 (18:11 +0200)
Backported from mainline
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.

* gcc.dg/gomp/pr58809.c: New test.

From-SVN: r210180

gcc/ChangeLog
gcc/fold-const.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/gomp/pr58809.c [new file with mode: 0644]

index c1595650e50936e9e4665b23c4f037d7d3fb7872..b14a3b5f4866d0064f2ccf956b568a880e686b51 100644 (file)
@@ -1,6 +1,12 @@
 2014-05-07  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
+       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-12-03  Jakub Jelinek  <jakub@redhat.com>
 
        PR middle-end/59011
index d83f084dd0387a4a492f19b1976f2988011cab4a..c3c8f7e0ac30b23ed07c83160ed9e511dee0bcb8 100644 (file)
@@ -4879,12 +4879,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)
index f098fe5cbc0136bf1f9dd1b9b0f30f662d1b5756..b6e3f4d8d2f9ebfff27b15866a6b65a499ebe09b 100644 (file)
@@ -1,6 +1,11 @@
 2014-05-07  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
+       2013-10-21  Marek Polacek  <polacek@redhat.com>
+
+       PR middle-end/58809
+       * gcc.dg/gomp/pr58809.c: New test.
+
        2013-12-03  Jakub Jelinek  <jakub@redhat.com>
 
        PR middle-end/59011
diff --git a/gcc/testsuite/gcc.dg/gomp/pr58809.c b/gcc/testsuite/gcc.dg/gomp/pr58809.c
new file mode 100644 (file)
index 0000000..5dc02f6
--- /dev/null
@@ -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)
+  ;
+}