Home | History | Annotate | Download | only in expr.call
      1 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
      2 
      3 struct X1 {
      4   X1();
      5 };
      6 
      7 struct X2 {
      8   X2();
      9   ~X2();
     10 };
     11 
     12 struct X3 {
     13   X3(const X3&) = default;
     14 };
     15 
     16 struct X4 {
     17   X4(const X4&) = default;
     18   X4(X4&);
     19 };
     20 
     21 void vararg(...);
     22 
     23 void g();
     24 
     25 void f(X1 x1, X2 x2, X3 x3, X4 x4) {
     26   vararg(x1); // OK
     27   vararg(x2); // expected-error{{cannot pass object of non-trivial type 'X2' through variadic function; call will abort at runtime}}
     28   vararg(x3); // OK
     29   vararg(x4); // expected-error{{cannot pass object of non-trivial type 'X4' through variadic function; call will abort at runtime}}
     30 
     31   vararg(g()); // expected-error{{cannot pass expression of type 'void' to variadic function}}
     32   vararg({1, 2, 3}); // expected-error{{cannot pass initializer list to variadic function}}
     33 }
     34 
     35 
     36 namespace PR11131 {
     37   struct S;
     38 
     39   S &getS();
     40 
     41   int f(...);
     42 
     43   void g() {
     44     (void)sizeof(f(getS()));
     45   }
     46 }
     47