OSDN Git Service

Backported from mainline
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 7 May 2014 16:11:42 +0000 (16:11 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 7 May 2014 16:11:42 +0000 (16:11 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_7-branch@210180 138bc75d-0d04-0410-961f-82ee72b054a4

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

index c159565..b14a3b5 100644 (file)
@@ -1,6 +1,12 @@
 2014-05-07  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
 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
        2013-12-03  Jakub Jelinek  <jakub@redhat.com>
 
        PR middle-end/59011
index d83f084..c3c8f7e 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;
   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");
 
   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)
   /* If this is an OR operation, invert both sides; we will invert
      again at the end.  */
   if (or_op)
index f098fe5..b6e3f4d 100644 (file)
@@ -1,6 +1,11 @@
 2014-05-07  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
 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
        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)
+  ;
+}