]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR c/47809 (ICE in gimplify_expr, at gimplify.c:7291)
authorJakub Jelinek <jakub@redhat.com>
Thu, 7 Apr 2011 18:25:50 +0000 (20:25 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 7 Apr 2011 18:25:50 +0000 (20:25 +0200)
Backported from mainline
2011-02-19  Jakub Jelinek  <jakub@redhat.com>

PR c/47809
* c-common.c (c_fully_fold_internal): Handle VIEW_CONVERT_EXPR.

* gcc.target/i386/pr47809.c: New test.

From-SVN: r172114

gcc/ChangeLog
gcc/c-common.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr47809.c [new file with mode: 0644]

index d619992113a2dd3e716810a931a23cba67d625d3..8ebce09925b224b6366f3b1403d2edae64cf6b72 100644 (file)
@@ -1,6 +1,11 @@
 2011-04-07  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
+       2011-02-19  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/47809
+       * c-common.c (c_fully_fold_internal): Handle VIEW_CONVERT_EXPR.
+
        2011-01-26  Jakub Jelinek  <jakub@redhat.com>
 
        PR c/47473
index 03e56d28214546103ca7dc7fc8b0fa12b71c6d8e..72ea40427fe9f3ad7121fc3ef4f45dca666188b0 100644 (file)
@@ -1352,6 +1352,7 @@ c_fully_fold_internal (tree expr, bool in_init, bool *maybe_const_operands,
     case FIX_TRUNC_EXPR:
     case FLOAT_EXPR:
     CASE_CONVERT:
+    case VIEW_CONVERT_EXPR:
     case NON_LVALUE_EXPR:
     case NEGATE_EXPR:
     case BIT_NOT_EXPR:
index 48f03430af48ecb456384e319c10b8c20700e4c8..7a09f9f627c28a147b2392118342f56a46c6a04a 100644 (file)
@@ -1,6 +1,11 @@
 2011-04-07  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
+       2011-02-19  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/47809
+       * gcc.target/i386/pr47809.c: New test.
+
        2011-01-26  Jakub Jelinek  <jakub@redhat.com>
 
        PR c/47473
diff --git a/gcc/testsuite/gcc.target/i386/pr47809.c b/gcc/testsuite/gcc.target/i386/pr47809.c
new file mode 100644 (file)
index 0000000..5832a65
--- /dev/null
@@ -0,0 +1,13 @@
+/* PR c/47809 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -msse2" } */
+
+#include <emmintrin.h>
+double bar (double, double);
+
+__m128d
+foo (__m128d x)
+{
+  x *= (__m128d) { bar (1.0, 1.0), 0.0 };
+  return (__m128d) ((__m128i) x ^ (__m128i) { 0, 0});
+}