fwolff created this revision. fwolff added reviewers: simon.giesecke, alexfh, aaron.ballman. fwolff added a project: clang-tools-extra. Herald added subscribers: carlosgalvezp, xazax.hun. fwolff requested review of this revision. Herald added a subscriber: cfe-commits.
Fixes PR#52217. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D113429 Files: clang-tools-extra/clang-tidy/bugprone/UnusedRaiiCheck.cpp clang-tools-extra/test/clang-tidy/checkers/bugprone-unused-raii.cpp Index: clang-tools-extra/test/clang-tidy/checkers/bugprone-unused-raii.cpp =================================================================== --- clang-tools-extra/test/clang-tidy/checkers/bugprone-unused-raii.cpp +++ clang-tools-extra/test/clang-tidy/checkers/bugprone-unused-raii.cpp @@ -82,6 +82,28 @@ (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? Index: clang-tools-extra/clang-tidy/bugprone/UnusedRaiiCheck.cpp =================================================================== --- clang-tools-extra/clang-tidy/bugprone/UnusedRaiiCheck.cpp +++ clang-tools-extra/clang-tidy/bugprone/UnusedRaiiCheck.cpp @@ -29,10 +29,11 @@ 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); }
Index: clang-tools-extra/test/clang-tidy/checkers/bugprone-unused-raii.cpp =================================================================== --- clang-tools-extra/test/clang-tidy/checkers/bugprone-unused-raii.cpp +++ clang-tools-extra/test/clang-tidy/checkers/bugprone-unused-raii.cpp @@ -82,6 +82,28 @@ (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? Index: clang-tools-extra/clang-tidy/bugprone/UnusedRaiiCheck.cpp =================================================================== --- clang-tools-extra/clang-tidy/bugprone/UnusedRaiiCheck.cpp +++ clang-tools-extra/clang-tidy/bugprone/UnusedRaiiCheck.cpp @@ -29,10 +29,11 @@ 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); }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits