brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.2 KiB · 68b233a Raw
90 lines · cpp
1// RUN: %clang_cc1 -fsyntax-only %s -Wall2 3template <typename T> class A { struct { }; };4 5A<int> a0;6 7template <typename T> struct B {8  union {9    int a;10    void* b;11  };12    13  void f() {14    a = 10;15    b = 0;16  }17};18 19B<int> b0;20 21template <typename T> struct C {22  union {23    int a;24    void* b;25  };26 27  C(int a) : a(a) { }28  C(void* b) : b(b) { }29};30 31C<int> c0(0);32 33namespace PR7088 {34  template<typename T>35  void f() { 36    union { 37      int a; 38      union {39        float real;40        T d;41      };42    }; 43 44    a = 17;45    d = 3.14;46  }47 48  template void f<double>();49}50 51// Check for problems related to PR7402 that occur when template instantiation52// instantiates implicit initializers.53namespace PR7402 {54  struct X {55    union {56      struct {57        int x;58        int y;59      };60      int v[2];61    };62 63    // Check that this requirement survives instantiation.64    template <typename T> X(const T& t) : x(t), y(t) {}65  };66 67  X x(42.0);68}69 70namespace PR9188 {71  struct X0 {72    union {73      int member;74    };75  };76 77  static union {78    int global;79  };80 81  struct X1 : X0 {82    template<typename T>83    int f() {84      return this->X0::member + PR9188::global;85    }86  };87 88  template int X1::f<int>();89}90