]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR middle-end/36445 (ICE in expand_expr_real_1 with -O1 with vector registers)
authorAndrew Pinski <andrew_pinski@playstation.sony.com>
Wed, 3 Sep 2008 19:27:35 +0000 (19:27 +0000)
committerAndrew Pinski <pinskia@gcc.gnu.org>
Wed, 3 Sep 2008 19:27:35 +0000 (12:27 -0700)
2008-09-03  Andrew Pinski  <andrew_pinski@playstation.sony.com>

        PR middle-end/36445
        * g++.dg/torture/pr36445.C: New test.

From-SVN: r139947

gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/torture/pr36445.C [new file with mode: 0644]

index 3120d1c9e748b286103af5de7dbaa0b0f816cb2f..70f7eb7b03433b9e4742e39236d54a765fec6ec2 100644 (file)
@@ -1,3 +1,8 @@
+2008-09-03  Andrew Pinski  <andrew_pinski@playstation.sony.com>
+
+       PR middle-end/36445
+       * g++.dg/torture/pr36445.C: New test.
+
 2008-09-03  Andrew Pinski  <andrew_pinski@playstation.sony.com>
 
        PR middle-end/37293
diff --git a/gcc/testsuite/g++.dg/torture/pr36445.C b/gcc/testsuite/g++.dg/torture/pr36445.C
new file mode 100644 (file)
index 0000000..39a7a55
--- /dev/null
@@ -0,0 +1,22 @@
+/* { dg-do compile } */
+// This used to fail as we would try to expand a VCE where one side had
+// a mode of BLKmode and the other side was a vector mode.
+#define vector __attribute__((vector_size(16) ))
+struct struct1  {
+  union { float a[3]; }    vmx;
+  struct struct2   {
+    struct2(const struct2& r) {}
+  } w;
+} __attribute__((aligned(16)));
+struct struct3  {
+  vector float vmx;
+  operator const struct1& () const{
+    return *reinterpret_cast<const struct1*>(this);
+  }
+};
+struct3 func3( struct3 V1);
+struct3 func2( void );
+void func1( )  {
+  struct1 vVec = func2() ;
+  func3 ( (struct3&)vVec );
+}