aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Pinski <andrew_pinski@playstation.sony.com>2008-09-03 19:27:35 +0000
committerAndrew Pinski <pinskia@gcc.gnu.org>2008-09-03 12:27:35 -0700
commite8f97b70cbd45c8916af5a2ed44b61abf0c30e16 (patch)
tree8810bb7bcca3afd595e74a8e82a3c809b67782a9
parentc0ab1df3bb715e5e92265a82e59636301485ed39 (diff)
downloadgcc-e8f97b70cbd45c8916af5a2ed44b61abf0c30e16.zip
gcc-e8f97b70cbd45c8916af5a2ed44b61abf0c30e16.tar.gz
gcc-e8f97b70cbd45c8916af5a2ed44b61abf0c30e16.tar.bz2
re PR middle-end/36445 (ICE in expand_expr_real_1 with -O1 with vector registers)
2008-09-03 Andrew Pinski <andrew_pinski@playstation.sony.com> PR middle-end/36445 * g++.dg/torture/pr36445.C: New test. From-SVN: r139947
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/torture/pr36445.C22
2 files changed, 27 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 3120d1c..70f7eb7 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
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
* g++.dg/torture/ipa-cp-1.C: New test.
diff --git a/gcc/testsuite/g++.dg/torture/pr36445.C b/gcc/testsuite/g++.dg/torture/pr36445.C
new file mode 100644
index 0000000..39a7a55
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr36445.C
@@ -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 );
+}