diff options
| author | Artem Dergachev <artem.dergachev@gmail.com> | 2018-07-17 00:57:57 +0000 |
|---|---|---|
| committer | Artem Dergachev <artem.dergachev@gmail.com> | 2018-07-17 00:57:57 +0000 |
| commit | 8ac6c9dd67271cfecead8157929737659f838f36 (patch) | |
| tree | d217e5d6e8264e85270774293d1b696b3c2fe996 /clang/test | |
| parent | 35dbd0b1ff4b9c26a51fa8ae178f8799f3976f67 (diff) | |
| download | bcm5719-llvm-8ac6c9dd67271cfecead8157929737659f838f36.tar.gz bcm5719-llvm-8ac6c9dd67271cfecead8157929737659f838f36.zip | |
[CFG] [analyzer] Allow elidable copies to have more than one arguments.
Copy-constructors and move-constructors may have default arguments. It is
incorrect to assert that they only have one argument, i.e. the reference to the
object being copied or moved. Remove the assertion.
Differential Revision: https://reviews.llvm.org/D49215
llvm-svn: 337229
Diffstat (limited to 'clang/test')
| -rw-r--r-- | clang/test/Analysis/cfg-rich-constructors.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/clang/test/Analysis/cfg-rich-constructors.cpp b/clang/test/Analysis/cfg-rich-constructors.cpp index 3944141b926..ce3e5f84bae 100644 --- a/clang/test/Analysis/cfg-rich-constructors.cpp +++ b/clang/test/Analysis/cfg-rich-constructors.cpp @@ -878,3 +878,26 @@ void passArgumentWithDestructorByReference() { useDByReference(D()); } } // end namespace argument_constructors + +namespace copy_elision_with_extra_arguments { +class C { +public: + C(); + C(const C &c, int x = 0); +}; + +// CHECK: void testCopyElisionWhenCopyConstructorHasExtraArguments() +// CHECK: [B1] +// CXX11-ELIDE-NEXT: 1: copy_elision_with_extra_arguments::C() (CXXConstructExpr, [B1.3], [B1.5], class copy_elision_with_extra_arguments::C) +// CXX11-NOELIDE-NEXT: 1: copy_elision_with_extra_arguments::C() (CXXConstructExpr, [B1.3], class copy_elision_with_extra_arguments::C) +// CXX11-NEXT: 2: [B1.1] (ImplicitCastExpr, NoOp, const class copy_elision_with_extra_arguments::C) +// CXX11-NEXT: 3: [B1.2] +// CXX11-NEXT: 4: +// CXX11-NEXT: 5: [B1.3] (CXXConstructExpr, [B1.6], class copy_elision_with_extra_arguments::C) +// CXX11-NEXT: 6: copy_elision_with_extra_arguments::C c = copy_elision_with_extra_arguments::C(); +// CXX17-NEXT: 1: copy_elision_with_extra_arguments::C() (CXXConstructExpr, [B1.2], class copy_elision_with_extra_arguments::C) +// CXX17-NEXT: 2: copy_elision_with_extra_arguments::C c = copy_elision_with_extra_arguments::C(); +void testCopyElisionWhenCopyConstructorHasExtraArguments() { + C c = C(); +} +} // namespace copy_elision_with_extra_arguments |

