90 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
// 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>();
 | 
						|
}
 |