| // RUN: %clang_cc1 -fsyntax-only %s -Wall | 
 |  | 
 | template <typename T> class A { struct { }; }; | 
 |  | 
 | A<int> a0; | 
 |  | 
 | template <typename T> struct B { | 
 |   union { | 
 |     int a; | 
 |     void* b; | 
 |   }; | 
 |      | 
 |   void f() { | 
 |     a = 10; | 
 |     b = 0; | 
 |   } | 
 | }; | 
 |  | 
 | B<int> b0; | 
 |  | 
 | template <typename T> struct C { | 
 |   union { | 
 |     int a; | 
 |     void* b; | 
 |   }; | 
 |  | 
 |   C(int a) : a(a) { } | 
 |   C(void* b) : b(b) { } | 
 | }; | 
 |  | 
 | C<int> c0(0); | 
 |  | 
 | namespace PR7088 { | 
 |   template<typename T> | 
 |   void f() {  | 
 |     union {  | 
 |       int a;  | 
 |       union { | 
 |         float real; | 
 |         T d; | 
 |       }; | 
 |     };  | 
 |  | 
 |     a = 17; | 
 |     d = 3.14; | 
 |   } | 
 |  | 
 |   template void f<double>(); | 
 | } | 
 |  | 
 | // Check for problems related to PR7402 that occur when template instantiation | 
 | // instantiates implicit initializers. | 
 | namespace PR7402 { | 
 |   struct X { | 
 |     union { | 
 |       struct { | 
 |         int x; | 
 |         int y; | 
 |       }; | 
 |       int v[2]; | 
 |     }; | 
 |  | 
 |     // Check that this requirement survives instantiation. | 
 |     template <typename T> X(const T& t) : x(t), y(t) {} | 
 |   }; | 
 |  | 
 |   X x(42.0); | 
 | } | 
 |  | 
 | namespace PR9188 { | 
 |   struct X0 { | 
 |     union { | 
 |       int member; | 
 |     }; | 
 |   }; | 
 |  | 
 |   static union { | 
 |     int global; | 
 |   }; | 
 |  | 
 |   struct X1 : X0 { | 
 |     template<typename T> | 
 |     int f() { | 
 |       return this->X0::member + PR9188::global; | 
 |     } | 
 |   }; | 
 |  | 
 |   template int X1::f<int>(); | 
 | } |