aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/g++.dg/opt/pr51596.C
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.9/gcc/testsuite/g++.dg/opt/pr51596.C')
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/opt/pr51596.C39
1 files changed, 39 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/opt/pr51596.C b/gcc-4.9/gcc/testsuite/g++.dg/opt/pr51596.C
new file mode 100644
index 000000000..2ed94812d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/opt/pr51596.C
@@ -0,0 +1,39 @@
+// PR tree-optimization/51596
+// { dg-do compile }
+// { dg-options "-O -fnon-call-exceptions" }
+
+struct A { float v[2]; };
+struct B { int v[2]; };
+
+struct C
+{
+ B c;
+ C f ()
+ {
+ B b;
+ for (int i = 0; i < 2; i++)
+ b.v[i] = c.v[i];
+ return *this;
+ }
+};
+
+struct D
+{
+ A d;
+ D (B x)
+ {
+ for (int i = 0; i < 2; i++)
+ d.v[i] = x.v[i];
+ }
+};
+
+int bar ();
+
+C i;
+
+void
+foo ()
+{
+ while (bar ())
+ D (i.f ().c);
+}