From: Richard Smith Date: Thu, 22 Nov 2012 00:21:13 +0000 (+0000) Subject: Test that we correctly deal with multiple copy constructors when detecting X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1a6c43a9d215697dbe0418c145a6bd1c85ec654d;p=clang Test that we correctly deal with multiple copy constructors when detecting non-trivial special members for varargs calls. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@168476 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/CXX/expr/expr.post/expr.call/p7-0x.cpp b/test/CXX/expr/expr.post/expr.call/p7-0x.cpp index d51ba09835..018609d9a0 100644 --- a/test/CXX/expr/expr.post/expr.call/p7-0x.cpp +++ b/test/CXX/expr/expr.post/expr.call/p7-0x.cpp @@ -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}} }