diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2012-11-22 00:21:13 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2012-11-22 00:21:13 +0000 |
commit | 1a6c43a9d215697dbe0418c145a6bd1c85ec654d (patch) | |
tree | 051f67af7efd07ce203488c61740047a852455be /test/CXX/expr/expr.post/expr.call/p7-0x.cpp | |
parent | a6b2581f9595fb803fe7e2ef1d9f25e75b26d2fb (diff) |
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
Diffstat (limited to 'test/CXX/expr/expr.post/expr.call/p7-0x.cpp')
-rw-r--r-- | test/CXX/expr/expr.post/expr.call/p7-0x.cpp | 15 |
1 files changed, 13 insertions, 2 deletions
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}} } |