// { 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]; | |
} |