summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/torture/pr46149.C
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/g++.dg/torture/pr46149.C')
-rw-r--r--gcc/testsuite/g++.dg/torture/pr46149.C51
1 files changed, 51 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/torture/pr46149.C b/gcc/testsuite/g++.dg/torture/pr46149.C
new file mode 100644
index 000000000..bdc3d7704
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr46149.C
@@ -0,0 +1,51 @@
+// { dg-do run }
+// { dg-options "-fno-tree-sra" }
+
+struct S
+{
+ S ():p ((char *) __builtin_calloc (1, 1))
+ {
+ }
+ char *p;
+};
+
+template < class T > struct A
+{
+ A (const S & __m1, const T & __m2):m1 (__m1), m2 (__m2)
+ {
+ }
+ const S & m1;
+ const T & m2;
+};
+
+struct B:A < S >
+{
+ B (const S & __v):A < S > (__v, __v)
+ {
+ }
+};
+
+struct C:A < B >
+{
+ C (const S & __e1, const B & __e2):A < B > (__e1, __e2)
+ {
+ }
+};
+
+struct D
+{
+ D (const C & __c):c (__c)
+ {
+ }
+ const C c;
+};
+
+int
+main ()
+{
+ S s;
+ B b (s);
+ C c (s, b);
+ D d (c);
+ return d.c.m2.m2.p[0];
+}