Test that we correctly deal with multiple copy constructors when detecting

non-trivial special members for varargs calls.

llvm-svn: 168476
This commit is contained in:
Richard Smith 2012-11-22 00:21:13 +00:00
parent 3ad394931d
commit 56cb16dd92
1 changed files with 13 additions and 2 deletions

View File

@ -9,11 +9,22 @@ struct X2 {
~X2();
};
struct X3 {
X3(const X3&) = default;
};
struct X4 {
X4(const X4&) = default;
X4(X4&);
};
void vararg(...);
void f(X1 x1, X2 x2) {
vararg(x1); // okay
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}}
}