Author: Zeyi Xu Date: 2026-05-18T07:15:55+08:00 New Revision: 8f740a3cb68c30eb3a276fbc3b9cf460a196c217
URL: https://github.com/llvm/llvm-project/commit/8f740a3cb68c30eb3a276fbc3b9cf460a196c217 DIFF: https://github.com/llvm/llvm-project/commit/8f740a3cb68c30eb3a276fbc3b9cf460a196c217.diff LOG: [clang-tidy] Fix crash in misc-static-initialization-cycle (#198155) This commit fixes `misc-static-initialization-cycle` crashing on `catch (...)`. Catch-all handlers have no exception declaration, so traversal of `CXXCatchStmt` can call `TraverseDecl(nullptr)`. The check previously passed that null pointer to `DeclContext::containsDecl`. This commit fixes the problem by adding a null guard. Closes #198150 Added: Modified: clang-tools-extra/clang-tidy/misc/StaticInitializationCycleCheck.cpp clang-tools-extra/test/clang-tidy/checkers/misc/static-initialization-cycle.cpp Removed: ################################################################################ diff --git a/clang-tools-extra/clang-tidy/misc/StaticInitializationCycleCheck.cpp b/clang-tools-extra/clang-tidy/misc/StaticInitializationCycleCheck.cpp index eb230983c8a7a..3d1fc88e7233a 100644 --- a/clang-tools-extra/clang-tidy/misc/StaticInitializationCycleCheck.cpp +++ b/clang-tools-extra/clang-tidy/misc/StaticInitializationCycleCheck.cpp @@ -193,7 +193,7 @@ class VarUseCollector : public DynamicRecursiveASTVisitor { } bool TraverseAttr(Attr *At) override { return true; } bool TraverseDecl(Decl *D) override { - if (DC && DC->containsDecl(D)) + if (D && DC && DC->containsDecl(D)) return DynamicRecursiveASTVisitor::TraverseDecl(D); return true; } diff --git a/clang-tools-extra/test/clang-tidy/checkers/misc/static-initialization-cycle.cpp b/clang-tools-extra/test/clang-tidy/checkers/misc/static-initialization-cycle.cpp index 2e5af81b6af8c..c17a87758e243 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/misc/static-initialization-cycle.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/misc/static-initialization-cycle.cpp @@ -120,6 +120,14 @@ int f1() { int S::A = f1(); } +namespace catch_all_handler { +void f() { + try { + } catch (...) { + } +} +} // catch_all_handler + namespace recursive_calls { int f2(); int f1() { _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
