[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