forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			47 lines
		
	
	
		
			885 B
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			885 B
		
	
	
	
		
			C++
		
	
	
	
// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
 | 
						|
 | 
						|
struct X1 {
 | 
						|
  X1();
 | 
						|
};
 | 
						|
 | 
						|
struct X2 {
 | 
						|
  X2();
 | 
						|
  ~X2();
 | 
						|
};
 | 
						|
 | 
						|
struct X3 {
 | 
						|
  X3(const X3&) = default;
 | 
						|
};
 | 
						|
 | 
						|
struct X4 {
 | 
						|
  X4(const X4&) = default;
 | 
						|
  X4(X4&);
 | 
						|
};
 | 
						|
 | 
						|
void vararg(...);
 | 
						|
 | 
						|
void g();
 | 
						|
 | 
						|
void f(X1 x1, X2 x2, X3 x3, X4 x4) {
 | 
						|
  vararg(x1); // OK
 | 
						|
  vararg(x2); // expected-error{{cannot pass object of non-trivial type 'X2' through variadic function; call will abort at runtime}}
 | 
						|
  vararg(x3); // OK
 | 
						|
  vararg(x4); // expected-error{{cannot pass object of non-trivial type 'X4' through variadic function; call will abort at runtime}}
 | 
						|
 | 
						|
  vararg(g()); // expected-error{{cannot pass expression of type 'void' to variadic function}}
 | 
						|
  vararg({1, 2, 3}); // expected-error{{cannot pass initializer list to variadic function}}
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
namespace PR11131 {
 | 
						|
  struct S;
 | 
						|
 | 
						|
  S &getS();
 | 
						|
 | 
						|
  int f(...);
 | 
						|
 | 
						|
  void g() {
 | 
						|
    (void)sizeof(f(getS()));
 | 
						|
  }
 | 
						|
}
 |