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

Reply via email to