diff options
author | Haojian Wu <hokein@google.com> | 2018-11-20 15:45:15 +0000 |
---|---|---|
committer | Haojian Wu <hokein@google.com> | 2018-11-20 15:45:15 +0000 |
commit | c63d935b23a20cbed8904db3bf3ddd1f698c80a2 (patch) | |
tree | 97ee357b0b2689916b9845c7c35dad2562a17ba0 /clang-tools-extra/test | |
parent | 6438972553fa8f5c9d584d21028639c5cd665f8c (diff) | |
download | bcm5719-llvm-c63d935b23a20cbed8904db3bf3ddd1f698c80a2.tar.gz bcm5719-llvm-c63d935b23a20cbed8904db3bf3ddd1f698c80a2.zip |
[clang-tidy] Don't generate incorrect fixes for class constructed from list-initialized arguments
Summary:
Currently the smart_ptr check (modernize-make-unique) generates the
fixes that cannot compile for cases like below -- because brace list can
not be deduced in `make_unique`.
```
struct Bar { int a, b; };
struct Foo { Foo(Bar); };
auto foo = std::unique_ptr<Foo>(new Foo({1, 2}));
```
Reviewers: aaron.ballman
Subscribers: xazax.hun, cfe-commits
Differential Revision: https://reviews.llvm.org/D54704
llvm-svn: 347315
Diffstat (limited to 'clang-tools-extra/test')
-rw-r--r-- | clang-tools-extra/test/clang-tidy/modernize-make-unique.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/clang-tools-extra/test/clang-tidy/modernize-make-unique.cpp b/clang-tools-extra/test/clang-tidy/modernize-make-unique.cpp index aeeb6dbd809..57298f6f6a4 100644 --- a/clang-tools-extra/test/clang-tidy/modernize-make-unique.cpp +++ b/clang-tools-extra/test/clang-tidy/modernize-make-unique.cpp @@ -58,6 +58,10 @@ struct I { I(G); }; +struct J { + J(E e, int); +}; + namespace { class Foo {}; } // namespace @@ -372,6 +376,34 @@ void initialization(int T, Base b) { // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use std::make_unique instead // CHECK-FIXES: PI1 = std::make_unique<I>(G({1, 2, 3})); + std::unique_ptr<J> PJ1 = std::unique_ptr<J>(new J({1, 2}, 1)); + // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: use std::make_unique instead + // CHECK-FIXES: std::unique_ptr<J> PJ1 = std::unique_ptr<J>(new J({1, 2}, 1)); + PJ1.reset(new J({1, 2}, 1)); + // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use std::make_unique instead + // CHECK-FIXES: PJ1.reset(new J({1, 2}, 1)); + + std::unique_ptr<J> PJ2 = std::unique_ptr<J>(new J(E{1, 2}, 1)); + // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: use std::make_unique instead + // CHECK-FIXES: std::unique_ptr<J> PJ2 = std::make_unique<J>(E{1, 2}, 1); + PJ2.reset(new J(E{1, 2}, 1)); + // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use std::make_unique instead + // CHECK-FIXES: PJ2 = std::make_unique<J>(E{1, 2}, 1); + + std::unique_ptr<J> PJ3 = std::unique_ptr<J>(new J{ {1, 2}, 1 }); + // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: use std::make_unique instead + // CHECK-FIXES: std::unique_ptr<J> PJ3 = std::unique_ptr<J>(new J{ {1, 2}, 1 }); + PJ3.reset(new J{ {1, 2}, 1 }); + // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use std::make_unique instead + // CHECK-FIXES: PJ3.reset(new J{ {1, 2}, 1 }); + + std::unique_ptr<J> PJ4 = std::unique_ptr<J>(new J{E{1, 2}, 1}); + // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: use std::make_unique instead + // CHECK-FIXES: std::unique_ptr<J> PJ4 = std::make_unique<J>(E{1, 2}, 1); + PJ4.reset(new J{E{1, 2}, 1}); + // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use std::make_unique instead + // CHECK-FIXES: PJ4 = std::make_unique<J>(E{1, 2}, 1); + std::unique_ptr<Foo> FF = std::unique_ptr<Foo>(new Foo()); // CHECK-MESSAGES: :[[@LINE-1]]:29: warning: // CHECK-FIXES: std::unique_ptr<Foo> FF = std::make_unique<Foo>(); |