Author: Stephen Kelly Date: 2021-02-20T22:07:20Z New Revision: 77056fe58e83100b902216d7bc6274129f80abda
URL: https://github.com/llvm/llvm-project/commit/77056fe58e83100b902216d7bc6274129f80abda DIFF: https://github.com/llvm/llvm-project/commit/77056fe58e83100b902216d7bc6274129f80abda.diff LOG: [clang-tidy] Simplify throw keyword missing check Extend test to verify that it does not match in template instantiations. Differential Revision: https://reviews.llvm.org/D96132 Added: Modified: clang-tools-extra/clang-tidy/bugprone/ThrowKeywordMissingCheck.cpp clang-tools-extra/clang-tidy/bugprone/ThrowKeywordMissingCheck.h clang-tools-extra/test/clang-tidy/checkers/bugprone-throw-keyword-missing.cpp Removed: ################################################################################ diff --git a/clang-tools-extra/clang-tidy/bugprone/ThrowKeywordMissingCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/ThrowKeywordMissingCheck.cpp index 25e7bc9d91e0..462a33a374a5 100644 --- a/clang-tools-extra/clang-tidy/bugprone/ThrowKeywordMissingCheck.cpp +++ b/clang-tools-extra/clang-tidy/bugprone/ThrowKeywordMissingCheck.cpp @@ -21,17 +21,16 @@ void ThrowKeywordMissingCheck::registerMatchers(MatchFinder *Finder) { cxxConstructorDecl(hasAnyConstructorInitializer(anything())); Finder->addMatcher( - expr(anyOf(cxxFunctionalCastExpr(), cxxBindTemporaryExpr(), - cxxTemporaryObjectExpr()), - hasType(cxxRecordDecl( - isSameOrDerivedFrom(matchesName("[Ee]xception|EXCEPTION")))), - unless(anyOf(hasAncestor(stmt( - anyOf(cxxThrowExpr(), callExpr(), returnStmt()))), - hasAncestor(varDecl()), - allOf(hasAncestor(CtorInitializerList), - unless(hasAncestor(cxxCatchStmt())))))) + cxxConstructExpr( + hasType(cxxRecordDecl( + isSameOrDerivedFrom(matchesName("[Ee]xception|EXCEPTION")))), + unless(anyOf(hasAncestor(stmt( + anyOf(cxxThrowExpr(), callExpr(), returnStmt()))), + hasAncestor(varDecl()), + allOf(hasAncestor(CtorInitializerList), + unless(hasAncestor(cxxCatchStmt())))))) .bind("temporary-exception-not-thrown"), - this); + this); } void ThrowKeywordMissingCheck::check(const MatchFinder::MatchResult &Result) { diff --git a/clang-tools-extra/clang-tidy/bugprone/ThrowKeywordMissingCheck.h b/clang-tools-extra/clang-tidy/bugprone/ThrowKeywordMissingCheck.h index 0ea1faab249c..fc2203765f1c 100644 --- a/clang-tools-extra/clang-tidy/bugprone/ThrowKeywordMissingCheck.h +++ b/clang-tools-extra/clang-tidy/bugprone/ThrowKeywordMissingCheck.h @@ -29,6 +29,9 @@ class ThrowKeywordMissingCheck : public ClangTidyCheck { } void registerMatchers(ast_matchers::MatchFinder *Finder) override; void check(const ast_matchers::MatchFinder::MatchResult &Result) override; + llvm::Optional<TraversalKind> getCheckTraversalKind() const override { + return TK_IgnoreUnlessSpelledInSource; + } }; } // namespace bugprone diff --git a/clang-tools-extra/test/clang-tidy/checkers/bugprone-throw-keyword-missing.cpp b/clang-tools-extra/test/clang-tidy/checkers/bugprone-throw-keyword-missing.cpp index 7780089ce8f3..5fae036fc5a3 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/bugprone-throw-keyword-missing.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/bugprone-throw-keyword-missing.cpp @@ -94,8 +94,17 @@ void nameContainsExceptionThrownTest(int i) { template <class Exception> void f(int i, Exception excToBeThrown) {} +template <class SomeType> +void templ(int i) { + if (i > 0) + SomeType(); +} + void funcCallWithTempExcTest() { f(5, RegularException()); + + templ<RegularException>(4); + templ<RegularClass>(4); } // Global variable initialization test. _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits