[clang] [clang][analyzer] StdLibraryFunctionsChecker getcwd fix (PR #175794)
Balázs Kéri via cfe-commits
cfe-commits at lists.llvm.org
Tue Jan 13 08:47:34 PST 2026
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?= <balazs.keri at ericsson.com>
Date: Tue, 13 Jan 2026 16:46:03 +0100
Subject: [PATCH 1/2] [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?= <balazs.keri at ericsson.com>
Date: Tue, 13 Jan 2026 17:46:54 +0100
Subject: [PATCH 2/2] 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);
More information about the cfe-commits
mailing list