1295009Sjkim// { dg-do run }
2280297Sjkim// { dg-options "-fno-tree-sra" }
3280297Sjkim
4280297Sjkimstruct S
568651Skris{
668651Skris  S ():p ((char *) __builtin_calloc (1, 1))
768651Skris  {
868651Skris  }
968651Skris  char *p;
1068651Skris};
1168651Skris
1268651Skristemplate < class T > struct A
1368651Skris{
14280297Sjkim  A (const S & __m1, const T & __m2):m1 (__m1), m2 (__m2)
1568651Skris  {
1668651Skris  }
1768651Skris  const S & m1;
1868651Skris  const T & m2;
1968651Skris};
2068651Skris
2168651Skrisstruct B:A < S >
2268651Skris{
2368651Skris  B (const S & __v):A < S > (__v, __v)
2468651Skris  {
2568651Skris  }
2668651Skris};
2768651Skris
2868651Skrisstruct C:A < B >
2968651Skris{
3068651Skris  C (const S & __e1, const B & __e2):A < B > (__e1, __e2)
3168651Skris  {
3268651Skris  }
3368651Skris};
3468651Skris
3568651Skrisstruct D
3668651Skris{
3768651Skris  D (const C & __c):c (__c)
3868651Skris  {
3968651Skris  }
4068651Skris  const C c;
4168651Skris};
4268651Skris
4368651Skrisint
4468651Skrismain ()
4568651Skris{
4668651Skris  S s;
4768651Skris  B b (s);
4868651Skris  C c (s, b);
4968651Skris  D d (c);
5068651Skris  return d.c.m2.m2.p[0];
5168651Skris}
5268651Skris