https://github.com/balazske updated 
https://github.com/llvm/llvm-project/pull/175794

From 393a073fec7df8351d6801e381b7fbec8fc218fe Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bal=C3=A1zs=20K=C3=A9ri?= <[email protected]>
Date: Tue, 13 Jan 2026 16:46:03 +0100
Subject: [PATCH 1/3] [clang][analyzer] StdLibraryFunctionsChecker getcwd fix

---
 ...td-c-library-functions-char-uchar-conv.cpp | 28 +++++++++++++++++++
 1 file changed, 28 insertions(+)
 create mode 100644 
clang/test/Analysis/std-c-library-functions-char-uchar-conv.cpp

diff --git a/clang/test/Analysis/std-c-library-functions-char-uchar-conv.cpp 
b/clang/test/Analysis/std-c-library-functions-char-uchar-conv.cpp
new file mode 100644
index 0000000000000..dcb233e072af4
--- /dev/null
+++ b/clang/test/Analysis/std-c-library-functions-char-uchar-conv.cpp
@@ -0,0 +1,28 @@
+// RUN: %clang_analyze_cc1 \
+// RUN:   -analyzer-checker=core,unix.StdCLibraryFunctions,unix.Errno \
+// RUN:   -analyzer-config unix.StdCLibraryFunctions:ModelPOSIX=true \
+// RUN:   -verify %s
+//
+// expected-no-diagnostics
+
+#include "Inputs/system-header-simulator-cxx.h"
+#include "Inputs/errno_var.h"
+
+char *getcwd(char *buf, size_t size);
+
+int main(int argc, char *argv[]) {
+  std::vector<char> charbuf;
+  if (!getcwd(charbuf.data(), charbuf.size() - 1)) {
+    if (errno == 2) {
+      return 1;
+    }
+  }
+
+  std::vector<unsigned char> ucharbuf;
+  if (!getcwd((char*)ucharbuf.data(), ucharbuf.size() - 1)) {
+    if (errno == 2) { // no (false) warning from unix.Errno on this line
+      return 1;
+    }
+  }
+  return 0;
+}

From bef9a5247a309ed3b97a85cab1ecbd2b6a5c015b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bal=C3=A1zs=20K=C3=A9ri?= <[email protected]>
Date: Tue, 13 Jan 2026 17:46:54 +0100
Subject: [PATCH 2/3] added missing changes

---
 .../lib/StaticAnalyzer/Checkers/StdLibraryFunctionsChecker.cpp  | 2 +-
 clang/test/Analysis/Inputs/system-header-simulator-cxx.h        | 2 ++
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/clang/lib/StaticAnalyzer/Checkers/StdLibraryFunctionsChecker.cpp 
b/clang/lib/StaticAnalyzer/Checkers/StdLibraryFunctionsChecker.cpp
index 844447f59f7f6..09202f513b9e8 100644
--- a/clang/lib/StaticAnalyzer/Checkers/StdLibraryFunctionsChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/StdLibraryFunctionsChecker.cpp
@@ -2657,7 +2657,7 @@ void StdLibraryFunctionsChecker::initFunctionSummaries(
         Summary(NoEvalCall)
             .Case({NotNull(0),
                    ArgumentCondition(1, WithinRange, Range(1, SizeMax)),
-                   ReturnValueCondition(BO_EQ, ArgNo(0))},
+                   ReturnValueCondition(BO_EQ, ArgNo(0)), NotNull(Ret)},
                   ErrnoMustNotBeChecked, GenericSuccessMsg)
             .Case({NotNull(0),
                    ArgumentCondition(1, WithinRange, SingleValue(0)),
diff --git a/clang/test/Analysis/Inputs/system-header-simulator-cxx.h 
b/clang/test/Analysis/Inputs/system-header-simulator-cxx.h
index c5aeb0af9d578..32568a38bd3eb 100644
--- a/clang/test/Analysis/Inputs/system-header-simulator-cxx.h
+++ b/clang/test/Analysis/Inputs/system-header-simulator-cxx.h
@@ -321,6 +321,8 @@ namespace std {
     void emplace_back(Args&&... args);
     void pop_back();
 
+    T *data();
+
     iterator insert(const_iterator position, const value_type &val);
     iterator insert(const_iterator position, size_type n,
                     const value_type &val);

From 09522949c0188aa84f71eca33b024ac838f341e7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bal=C3=A1zs=20K=C3=A9ri?= <[email protected]>
Date: Wed, 14 Jan 2026 18:10:46 +0100
Subject: [PATCH 3/3] simplified test

---
 .../std-c-library-functions-char-uchar-conv.c | 25 +++++++++++++++++
 ...td-c-library-functions-char-uchar-conv.cpp | 28 -------------------
 2 files changed, 25 insertions(+), 28 deletions(-)
 create mode 100644 
clang/test/Analysis/std-c-library-functions-char-uchar-conv.c
 delete mode 100644 
clang/test/Analysis/std-c-library-functions-char-uchar-conv.cpp

diff --git a/clang/test/Analysis/std-c-library-functions-char-uchar-conv.c 
b/clang/test/Analysis/std-c-library-functions-char-uchar-conv.c
new file mode 100644
index 0000000000000..8a53498619dda
--- /dev/null
+++ b/clang/test/Analysis/std-c-library-functions-char-uchar-conv.c
@@ -0,0 +1,25 @@
+// RUN: %clang_analyze_cc1 \
+// RUN:   -analyzer-checker=core,unix.StdCLibraryFunctions,unix.Errno \
+// RUN:   -analyzer-config unix.StdCLibraryFunctions:ModelPOSIX=true \
+// RUN:   -verify %s
+//
+// expected-no-diagnostics
+
+#include "Inputs/errno_var.h"
+
+typedef __typeof__(sizeof(int)) size_t;
+char *getcwd(char *buf, size_t size);
+
+void gh_175136(char *CharData, unsigned char *UCharData, size_t Size) {
+  if (!getcwd(CharData, Size)) {
+    if (errno == 2) {
+      return;
+    }
+  }
+
+  if (!getcwd((char*)UCharData, Size)) {
+    if (errno == 2) {// Previously there was a (false) warning from unix.Errno 
on this line
+      return;
+    }
+  }
+}
diff --git a/clang/test/Analysis/std-c-library-functions-char-uchar-conv.cpp 
b/clang/test/Analysis/std-c-library-functions-char-uchar-conv.cpp
deleted file mode 100644
index dcb233e072af4..0000000000000
--- a/clang/test/Analysis/std-c-library-functions-char-uchar-conv.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-// RUN: %clang_analyze_cc1 \
-// RUN:   -analyzer-checker=core,unix.StdCLibraryFunctions,unix.Errno \
-// RUN:   -analyzer-config unix.StdCLibraryFunctions:ModelPOSIX=true \
-// RUN:   -verify %s
-//
-// expected-no-diagnostics
-
-#include "Inputs/system-header-simulator-cxx.h"
-#include "Inputs/errno_var.h"
-
-char *getcwd(char *buf, size_t size);
-
-int main(int argc, char *argv[]) {
-  std::vector<char> charbuf;
-  if (!getcwd(charbuf.data(), charbuf.size() - 1)) {
-    if (errno == 2) {
-      return 1;
-    }
-  }
-
-  std::vector<unsigned char> ucharbuf;
-  if (!getcwd((char*)ucharbuf.data(), ucharbuf.size() - 1)) {
-    if (errno == 2) { // no (false) warning from unix.Errno on this line
-      return 1;
-    }
-  }
-  return 0;
-}

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to