1// PR c++/36089 2// { dg-do run } 3 4extern "C" void abort (); 5 6int f () 7{ 8 const int c(2); 9 int d[c] = { 0, 0 }; 10 return d[0] + sizeof d; 11} 12 13struct A 14{ 15 static int f () 16 { 17 const int c(2); 18 int d[c] = { 0, 0 }; 19 return d[0] + sizeof d; 20 } 21}; 22 23template <int> struct B 24{ 25 static int f () 26 { 27 const int c = 2; 28 int d[c] = { 0, 0 }; 29 return d[0] + sizeof d; 30 } 31}; 32 33template <int> struct C 34{ 35 static int f () 36 { 37 const int c(2); 38 int d[c] = { 0, 0 }; 39 return d[0] + sizeof d; 40 } 41}; 42 43template <int> struct D 44{ 45 static int f () 46 { 47 const int e(2); 48 const int c(e); 49 int d[c] = { 0, 0 }; 50 return d[0] + sizeof d; 51 } 52}; 53 54int 55main (void) 56{ 57 int v = f (); 58 if (v != 2 * sizeof (int)) 59 abort (); 60 if (v != A::f ()) 61 abort (); 62 if (v != B<6>::f ()) 63 abort (); 64 if (v != C<0>::f ()) 65 abort (); 66 if (v != D<1>::f ()) 67 abort (); 68} 69