[libc-commits] [libc] [libc] Define SSIZE_MAX in limits-macros.h (PR #201087)

Jeff Bailey via libc-commits libc-commits at lists.llvm.org
Tue Jun 2 03:57:56 PDT 2026


https://github.com/kaladron updated https://github.com/llvm/llvm-project/pull/201087

>From 6c4f9cb102236b0bb843ce1e0d3abfdb12768d4e Mon Sep 17 00:00:00 2001
From: Jeff Bailey <jbailey at raspberryginger.com>
Date: Tue, 2 Jun 2026 11:12:04 +0100
Subject: [PATCH] [libc] Define SSIZE_MAX in limits-macros.h

Defined SSIZE_MAX in limits-macros.h to support POSIX compliance.
Applications compiling against LLVM libc require SSIZE_MAX to be
defined in limits.h.

SSIZE_MAX is defined strictly in terms of __PTRDIFF_MAX__, matching
ssize_t defined as __PTRDIFF_TYPE__, ensuring they are always
structurally aligned and compile-time safe.

Added Doxygen comments for SSIZE_MAX.
Added SSIZE_MAX to limits.yaml and added a unit test in limits_test.cpp
to verify the definition.

Assisted-by: Automated tooling, human reviewed.
---
 libc/include/limits.yaml                      | 2 ++
 libc/include/llvm-libc-macros/limits-macros.h | 7 +++++++
 libc/test/src/__support/CPP/limits_test.cpp   | 6 ++++++
 3 files changed, 15 insertions(+)

diff --git a/libc/include/limits.yaml b/libc/include/limits.yaml
index 0f16d87f67a70..25dd6bf2395da 100644
--- a/libc/include/limits.yaml
+++ b/libc/include/limits.yaml
@@ -84,6 +84,8 @@ macros:
     macro_header: limits-macros.h
   - macro_name: PTHREAD_DESTRUCTOR_ITERATIONS
     macro_header: limits-macros.h
+  - macro_name: SSIZE_MAX
+    macro_header: limits-macros.h
 types: []
 enums: []
 objects: []
diff --git a/libc/include/llvm-libc-macros/limits-macros.h b/libc/include/llvm-libc-macros/limits-macros.h
index b4e22fa7b239a..3de4ad2e7c245 100644
--- a/libc/include/llvm-libc-macros/limits-macros.h
+++ b/libc/include/llvm-libc-macros/limits-macros.h
@@ -261,4 +261,11 @@
 #define IOV_MAX 1024
 #endif // IOV_MAX
 
+#ifndef SSIZE_MAX
+#ifdef __PTRDIFF_MAX__
+/// The maximum value that can be stored in an object of type ssize_t.
+#define SSIZE_MAX __PTRDIFF_MAX__
+#endif
+#endif
+
 #endif // LLVM_LIBC_MACROS_LIMITS_MACROS_H
diff --git a/libc/test/src/__support/CPP/limits_test.cpp b/libc/test/src/__support/CPP/limits_test.cpp
index 6c94b091f15bf..3e2aaa4ebab98 100644
--- a/libc/test/src/__support/CPP/limits_test.cpp
+++ b/libc/test/src/__support/CPP/limits_test.cpp
@@ -31,6 +31,12 @@ TEST(LlvmLibcLimitsTest, LimitsFollowSpec) {
   ASSERT_EQ(cpp::numeric_limits<long long>::min(), LLONG_MIN);
 
   ASSERT_EQ(cpp::numeric_limits<unsigned long long>::max(), ULLONG_MAX);
+
+#ifdef SSIZE_MAX
+  ASSERT_EQ(cpp::numeric_limits<__PTRDIFF_TYPE__>::max(), SSIZE_MAX);
+#else
+#error "SSIZE_MAX is not defined"
+#endif
 }
 
 TEST(LlvmLibcLimitsTest, UInt128Limits) {



More information about the libc-commits mailing list