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

Reply via email to