2011-10-14 06:29:44 +08:00
|
|
|
// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
|
2011-05-22 00:27:21 +08:00
|
|
|
|
|
|
|
struct X1 {
|
|
|
|
X1();
|
|
|
|
};
|
|
|
|
|
|
|
|
struct X2 {
|
|
|
|
X2();
|
|
|
|
~X2();
|
|
|
|
};
|
|
|
|
|
2012-11-22 08:21:13 +08:00
|
|
|
struct X3 {
|
|
|
|
X3(const X3&) = default;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct X4 {
|
|
|
|
X4(const X4&) = default;
|
|
|
|
X4(X4&);
|
|
|
|
};
|
|
|
|
|
2011-05-22 00:27:21 +08:00
|
|
|
void vararg(...);
|
|
|
|
|
2012-11-22 08:21:13 +08:00
|
|
|
void f(X1 x1, X2 x2, X3 x3, X4 x4) {
|
|
|
|
vararg(x1); // OK
|
2011-05-22 00:27:21 +08:00
|
|
|
vararg(x2); // expected-error{{cannot pass object of non-trivial type 'X2' through variadic function; call will abort at runtime}}
|
2012-11-22 08:21:13 +08:00
|
|
|
vararg(x3); // OK
|
|
|
|
vararg(x4); // expected-error{{cannot pass object of non-trivial type 'X4' through variadic function; call will abort at runtime}}
|
2011-05-22 00:27:21 +08:00
|
|
|
}
|
2011-10-15 04:34:19 +08:00
|
|
|
|
|
|
|
|
|
|
|
namespace PR11131 {
|
|
|
|
struct S;
|
|
|
|
|
|
|
|
S &getS();
|
|
|
|
|
|
|
|
void f(...);
|
|
|
|
|
|
|
|
void g() {
|
|
|
|
(void)sizeof(f(getS()));
|
|
|
|
}
|
|
|
|
}
|