forked from OSchip/llvm-project
[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:
parent
7829506731
commit
be5d4487b4
|
@ -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;
|
||||
|
||||
|
|
|
@ -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>();
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue