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 <[email protected]> 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; } _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
