[clang-tidy] Use `hasCanonicalType()` matcher in `bugprone-unused-raii` check

Fixes PR#52217.

Reviewed By: simon.giesecke

Differential Revision: https://reviews.llvm.org/D113429
This commit is contained in:
Fabian Wolff 2021-12-02 01:34:31 +01:00
parent ab112c2964
commit 987a21522f
2 changed files with 26 additions and 3 deletions

View File

@ -29,10 +29,11 @@ void UnusedRaiiCheck::registerMatchers(MatchFinder *Finder) {
Finder->addMatcher(
mapAnyOf(cxxConstructExpr, cxxUnresolvedConstructExpr)
.with(hasParent(compoundStmt().bind("compound")),
anyOf(hasType(cxxRecordDecl(hasNonTrivialDestructor())),
hasType(templateSpecializationType(
anyOf(hasType(hasCanonicalType(recordType(hasDeclaration(
cxxRecordDecl(hasNonTrivialDestructor()))))),
hasType(hasCanonicalType(templateSpecializationType(
hasDeclaration(classTemplateDecl(has(
cxxRecordDecl(hasNonTrivialDestructor()))))))))
cxxRecordDecl(hasNonTrivialDestructor())))))))))
.bind("expr"),
this);
}

View File

@ -82,6 +82,28 @@ void templatetest() {
(void)i;
}
template <typename T>
void aliastest() {
using X = Foo;
using Y = X;
using Z = Y;
Z(42);
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: object destroyed immediately after creation; did you mean to name the object?
// CHECK-FIXES: Z give_me_a_name(42);
typedef Z ZT;
ZT(42, 13);
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: object destroyed immediately after creation; did you mean to name the object?
// CHECK-FIXES: ZT give_me_a_name(42, 13);
using TT = TCtorDefaultArg<T>;
TT(42);
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: object destroyed immediately after creation; did you mean to name the object?
// CHECK-FIXES: TT give_me_a_name(42);
(void)0;
}
void test() {
Foo(42);
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: object destroyed immediately after creation; did you mean to name the object?