[clang] [analyzer] Fix crash on non-standard string function overloads (PR #180544)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Feb 9 07:25:40 PST 2026
https://github.com/ParkHanbum created https://github.com/llvm/llvm-project/pull/180544
Previously, C++ overloads like strcmp(char*, char) caused assertions.
Now validates argument types match standard signatures.
Fixed: #180422
>From db391bd8004eecec40c2b4aaf2b6f6cb4e73c99f Mon Sep 17 00:00:00 2001
From: Hanbum Park <kese111 at gmail.com>
Date: Mon, 9 Feb 2026 18:57:32 +0900
Subject: [PATCH] [analyzer] Fix crash on non-standard string function
overloads
Previously, C++ overloads like strcmp(char*, char) caused assertions.
Now validates argument types match standard signatures.
Fixed: #180422
---
.../StaticAnalyzer/Checkers/CStringChecker.cpp | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp
index 144411495f5a1..c3ca128ce5246 100644
--- a/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp
@@ -2801,8 +2801,23 @@ CStringChecker::FnCheck CStringChecker::identifyCall(const CallEvent &Call,
}
const FnCheck *Callback = Callbacks.lookup(Call);
- if (Callback)
+ if (Callback) {
+ if (const IdentifierInfo *II = FD->getIdentifier()) {
+ StringRef Name = II->getName();
+ // Logic to confirm if the function has the same type as the known
+ // standard function. String comparison functions (like strcmp) are
+ // expected to take pointers as arguments.
+ // Signature: int strcmp(const char *s1, const char *s2);
+ // Requirement: Exactly 2 arguments, both must be pointers.
+ if (Name == "strcmp" || Name == "strcasecmp" || Name == "strcoll")
+ if (FD->getNumParams() != 2 ||
+ !FD->getParamDecl(0)->getType()->isPointerType() ||
+ !FD->getParamDecl(1)->getType()->isPointerType())
+ return nullptr;
+ }
+
return *Callback;
+ }
return nullptr;
}
More information about the cfe-commits
mailing list