[clang-tidy] Fix another crash in make-unique check.

Summary:
The crash happens when calling `reset` method without any preceding
operation like "->" or ".", this could happen in a subclass of the
"std::unique_ptr".

Reviewers: alexfh

Reviewed By: alexfh

Subscribers: JDevlieghere, xazax.hun, cfe-commits

Differential Revision: https://reviews.llvm.org/D36452

llvm-svn: 310496
This commit is contained in:
Haojian Wu 2017-08-09 17:03:42 +00:00
parent 7829506731
commit be5d4487b4
2 changed files with 20 additions and 0 deletions

View File

@ -199,6 +199,13 @@ void MakeSmartPtrCheck::checkReset(SourceManager &SM,
return;
}
// There are some cases where we don't have operator ("." or "->") of the
// "reset" expression, e.g. call "reset()" method directly in the subclass of
// "std::unique_ptr<>". We skip these cases.
if (OperatorLoc.isInvalid()) {
return;
}
auto Diag = diag(ResetCallStart, "use %0 instead")
<< MakeSmartPtrFunctionName;

View File

@ -415,3 +415,16 @@ void macro() {
g2<bar::Bar>(t);
}
#undef DEFINE
class UniqueFoo : public std::unique_ptr<Foo> {
public:
void foo() {
reset(new Foo);
this->reset(new Foo);
// CHECK-MESSAGES: :[[@LINE-1]]:11: warning: use std::make_unique instead
// CHECK-FIXES: *this = std::make_unique<Foo>();
(*this).reset(new Foo);
// CHECK-MESSAGES: :[[@LINE-1]]:13: warning: use std::make_unique instead
// CHECK-FIXES: (*this) = std::make_unique<Foo>();
}
};