forked from OSchip/llvm-project
[clang-tidy] Fix an unused-raii check crash on objective-c++.
Differential Revision: https://reviews.llvm.org/D83293
This commit is contained in:
parent
0d656cb25d
commit
3b1e3d2273
|
@ -27,9 +27,10 @@ void UnusedRaiiCheck::registerMatchers(MatchFinder *Finder) {
|
|||
// Look for temporaries that are constructed in-place and immediately
|
||||
// destroyed. Look for temporaries created by a functional cast but not for
|
||||
// those returned from a call.
|
||||
auto BindTemp =
|
||||
cxxBindTemporaryExpr(unless(has(ignoringParenImpCasts(callExpr()))))
|
||||
.bind("temp");
|
||||
auto BindTemp = cxxBindTemporaryExpr(
|
||||
unless(has(ignoringParenImpCasts(callExpr()))),
|
||||
unless(has(ignoringParenImpCasts(objcMessageExpr()))))
|
||||
.bind("temp");
|
||||
Finder->addMatcher(
|
||||
traverse(ast_type_traits::TK_AsIs,
|
||||
exprWithCleanups(
|
||||
|
@ -79,6 +80,7 @@ void UnusedRaiiCheck::check(const MatchFinder::MatchResult &Result) {
|
|||
auto Matches =
|
||||
match(expr(hasDescendant(typeLoc().bind("t"))), *E, *Result.Context);
|
||||
const auto *TL = selectFirst<TypeLoc>("t", Matches);
|
||||
assert(TL);
|
||||
D << FixItHint::CreateInsertion(
|
||||
Lexer::getLocForEndOfToken(TL->getEndLoc(), 0, *Result.SourceManager,
|
||||
getLangOpts()),
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
// RUN: clang-tidy %s -checks=-*,bugprone-unused-raii -- | count 0
|
||||
|
||||
struct CxxClass {
|
||||
~CxxClass() {}
|
||||
};
|
||||
|
||||
@interface ObjcClass {
|
||||
}
|
||||
- (CxxClass)set:(int)p;
|
||||
@end
|
||||
|
||||
void test(ObjcClass *s) {
|
||||
[s set:1]; // ok, no crash, no diagnostic emitted.
|
||||
return;
|
||||
}
|
Loading…
Reference in New Issue