[clang] [LLVM][StaticAnalyzer] Add #undef REGISTER_CHECKER to files that define it (PR #188683)

via cfe-commits cfe-commits at lists.llvm.org
Wed Mar 25 23:01:31 PDT 2026


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang-static-analyzer-1

Author: Maksim Levental (makslevental)

<details>
<summary>Changes</summary>

Eight StaticAnalyzer checker files define a REGISTER_CHECKER macro that is never undefined, which can leak into subsequent translation units in unity builds. Add #undef REGISTER_CHECKER at the end of each file. See https://discourse.llvm.org/t/rfc-enabling-unity-build/90306 for more info.

"clauded" not coded

---
Full diff: https://github.com/llvm/llvm-project/pull/188683.diff


8 Files Affected:

- (modified) clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp (+2) 
- (modified) clang/lib/StaticAnalyzer/Checkers/CheckSecuritySyntaxOnly.cpp (+2) 
- (modified) clang/lib/StaticAnalyzer/Checkers/IvarInvalidationChecker.cpp (+2) 
- (modified) clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp (+2) 
- (modified) clang/lib/StaticAnalyzer/Checkers/NSErrorChecker.cpp (+2) 
- (modified) clang/lib/StaticAnalyzer/Checkers/NullabilityChecker.cpp (+2) 
- (modified) clang/lib/StaticAnalyzer/Checkers/PthreadLockChecker.cpp (+2) 
- (modified) clang/lib/StaticAnalyzer/Checkers/StackAddrEscapeChecker.cpp (+2) 


``````````diff
diff --git a/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp
index 3684bccaf2d9a..fbb47348db55b 100644
--- a/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp
@@ -3004,3 +3004,5 @@ REGISTER_CHECKER(OutOfBounds)
 REGISTER_CHECKER(BufferOverlap)
 REGISTER_CHECKER(NotNullTerm)
 REGISTER_CHECKER(UninitializedRead)
+
+#undef REGISTER_CHECKER
diff --git a/clang/lib/StaticAnalyzer/Checkers/CheckSecuritySyntaxOnly.cpp b/clang/lib/StaticAnalyzer/Checkers/CheckSecuritySyntaxOnly.cpp
index 1b94ccdbc4b5e..797e1efc7e8ca 100644
--- a/clang/lib/StaticAnalyzer/Checkers/CheckSecuritySyntaxOnly.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/CheckSecuritySyntaxOnly.cpp
@@ -1179,3 +1179,5 @@ bool ento::shouldRegisterDeprecatedOrUnsafeBufferHandling(
 }
 
 REGISTER_CHECKER(decodeValueOfObjCType)
+
+#undef REGISTER_CHECKER
diff --git a/clang/lib/StaticAnalyzer/Checkers/IvarInvalidationChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/IvarInvalidationChecker.cpp
index 3f0dc1d850232..ee65e34fee820 100644
--- a/clang/lib/StaticAnalyzer/Checkers/IvarInvalidationChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/IvarInvalidationChecker.cpp
@@ -740,3 +740,5 @@ bool ento::shouldRegisterIvarInvalidationModeling(const CheckerManager &mgr) {
 
 REGISTER_CHECKER(InstanceVariableInvalidation)
 REGISTER_CHECKER(MissingInvalidationMethod)
+
+#undef REGISTER_CHECKER
diff --git a/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp
index 68369f8e81eb2..1f6d633dc7ce6 100644
--- a/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp
@@ -4224,3 +4224,5 @@ REGISTER_CHECKER(NewDeleteChecker)
 REGISTER_CHECKER(NewDeleteLeaksChecker)
 REGISTER_CHECKER(MismatchedDeallocatorChecker)
 REGISTER_CHECKER(TaintedAllocChecker)
+
+#undef REGISTER_CHECKER
diff --git a/clang/lib/StaticAnalyzer/Checkers/NSErrorChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/NSErrorChecker.cpp
index d2760ca3a4b5e..a9fc0bd1697d2 100644
--- a/clang/lib/StaticAnalyzer/Checkers/NSErrorChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/NSErrorChecker.cpp
@@ -313,3 +313,5 @@ static bool IsCFError(QualType T, IdentifierInfo *II) {
 
 REGISTER_CHECKER(NSError, NSErrorMethodChecker)
 REGISTER_CHECKER(CFError, CFErrorFunctionChecker)
+
+#undef REGISTER_CHECKER
diff --git a/clang/lib/StaticAnalyzer/Checkers/NullabilityChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/NullabilityChecker.cpp
index eeb6b720cce2a..2746083431dce 100644
--- a/clang/lib/StaticAnalyzer/Checkers/NullabilityChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/NullabilityChecker.cpp
@@ -1418,3 +1418,5 @@ REGISTER_CHECKER(NullReturnedFromNonnull, false)
 REGISTER_CHECKER(NullableDereferenced, true)
 REGISTER_CHECKER(NullablePassedToNonnull, true)
 REGISTER_CHECKER(NullableReturnedFromNonnull, true)
+
+#undef REGISTER_CHECKER
diff --git a/clang/lib/StaticAnalyzer/Checkers/PthreadLockChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/PthreadLockChecker.cpp
index 86530086ff1b2..73e046cdb3fd7 100644
--- a/clang/lib/StaticAnalyzer/Checkers/PthreadLockChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/PthreadLockChecker.cpp
@@ -745,3 +745,5 @@ bool ento::shouldRegisterPthreadLockBase(const CheckerManager &mgr) { return tru
 REGISTER_CHECKER(PthreadLockChecker)
 REGISTER_CHECKER(FuchsiaLockChecker)
 REGISTER_CHECKER(C11LockChecker)
+
+#undef REGISTER_CHECKER
diff --git a/clang/lib/StaticAnalyzer/Checkers/StackAddrEscapeChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/StackAddrEscapeChecker.cpp
index 027bf780273cc..4c1633a51951e 100644
--- a/clang/lib/StaticAnalyzer/Checkers/StackAddrEscapeChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/StackAddrEscapeChecker.cpp
@@ -628,3 +628,5 @@ void StackAddrEscapeChecker::checkEndFunction(const ReturnStmt *RS,
 
 REGISTER_CHECKER(StackAddrEscape)
 REGISTER_CHECKER(StackAddrAsyncEscape)
+
+#undef REGISTER_CHECKER

``````````

</details>


https://github.com/llvm/llvm-project/pull/188683


More information about the cfe-commits mailing list