aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.8/gcc/testsuite/g++.dg/pr60769.C
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.8/gcc/testsuite/g++.dg/pr60769.C')
-rw-r--r--gcc-4.8/gcc/testsuite/g++.dg/pr60769.C43
1 files changed, 43 insertions, 0 deletions
diff --git a/gcc-4.8/gcc/testsuite/g++.dg/pr60769.C b/gcc-4.8/gcc/testsuite/g++.dg/pr60769.C
new file mode 100644
index 000000000..4c896c699
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.dg/pr60769.C
@@ -0,0 +1,43 @@
+/* { dg-do compile } */
+/* { dg-options "-O" } */
+
+template <class T> void fun(T);
+struct B {};
+struct R {
+ int *x;
+ B f;
+};
+R v(int &, R);
+void rfun(R &);
+struct A {
+ void m_fn2(R p1) {
+ R a = p1;
+ rfun(p1);
+ fun(this);
+ fun(a);
+ }
+};
+struct J {
+ A ep;
+ A ap;
+ int c2a;
+ void m_fn1(R &p2) {
+ R d, e, b;
+ v(c2a, p2);
+ e = v(c2a, b);
+ ap.m_fn2(e);
+ v(c2a, p2);
+ d = v(c2a, b);
+ ep.m_fn2(d);
+ }
+};
+struct N {
+ int &p_;
+ J cfo;
+};
+void fn3(N&n) {
+ R h;
+ n.cfo.m_fn1(h);
+}
+extern N &c;
+void fn1() { fn3(c); }