xref: /aosp_15_r20/external/llvm-libc/include/llvm-libc-macros/limits-macros.h (revision 71db0c75aadcf003ffe3238005f61d7618a3fead)
1*71db0c75SAndroid Build Coastguard Worker //===-- Definition of macros from limits.h --------------------------------===//
2*71db0c75SAndroid Build Coastguard Worker //
3*71db0c75SAndroid Build Coastguard Worker // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*71db0c75SAndroid Build Coastguard Worker // See https://llvm.org/LICENSE.txt for license information.
5*71db0c75SAndroid Build Coastguard Worker // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*71db0c75SAndroid Build Coastguard Worker //
7*71db0c75SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
8*71db0c75SAndroid Build Coastguard Worker 
9*71db0c75SAndroid Build Coastguard Worker #ifndef LLVM_LIBC_MACROS_LIMITS_MACROS_H
10*71db0c75SAndroid Build Coastguard Worker #define LLVM_LIBC_MACROS_LIMITS_MACROS_H
11*71db0c75SAndroid Build Coastguard Worker 
12*71db0c75SAndroid Build Coastguard Worker // Define all C23 macro constants of limits.h
13*71db0c75SAndroid Build Coastguard Worker 
14*71db0c75SAndroid Build Coastguard Worker #ifndef CHAR_BIT
15*71db0c75SAndroid Build Coastguard Worker #ifdef __CHAR_BIT__
16*71db0c75SAndroid Build Coastguard Worker #define CHAR_BIT __CHAR_BIT__
17*71db0c75SAndroid Build Coastguard Worker #else
18*71db0c75SAndroid Build Coastguard Worker #define CHAR_BIT 8
19*71db0c75SAndroid Build Coastguard Worker #endif // __CHAR_BIT__
20*71db0c75SAndroid Build Coastguard Worker #endif // CHAR_BIT
21*71db0c75SAndroid Build Coastguard Worker 
22*71db0c75SAndroid Build Coastguard Worker #ifndef MB_LEN_MAX
23*71db0c75SAndroid Build Coastguard Worker // Represents a single UTF-32 wide character in the default locale.
24*71db0c75SAndroid Build Coastguard Worker #define MB_LEN_MAX 4
25*71db0c75SAndroid Build Coastguard Worker #endif // MB_LEN_MAX
26*71db0c75SAndroid Build Coastguard Worker 
27*71db0c75SAndroid Build Coastguard Worker // *_WIDTH macros
28*71db0c75SAndroid Build Coastguard Worker 
29*71db0c75SAndroid Build Coastguard Worker #ifndef CHAR_WIDTH
30*71db0c75SAndroid Build Coastguard Worker #define CHAR_WIDTH CHAR_BIT
31*71db0c75SAndroid Build Coastguard Worker #endif // CHAR_WIDTH
32*71db0c75SAndroid Build Coastguard Worker 
33*71db0c75SAndroid Build Coastguard Worker #ifndef SCHAR_WIDTH
34*71db0c75SAndroid Build Coastguard Worker #define SCHAR_WIDTH CHAR_BIT
35*71db0c75SAndroid Build Coastguard Worker #endif // SCHAR_WIDTH
36*71db0c75SAndroid Build Coastguard Worker 
37*71db0c75SAndroid Build Coastguard Worker #ifndef UCHAR_WIDTH
38*71db0c75SAndroid Build Coastguard Worker #define UCHAR_WIDTH CHAR_BIT
39*71db0c75SAndroid Build Coastguard Worker #endif // UCHAR_WIDTH
40*71db0c75SAndroid Build Coastguard Worker 
41*71db0c75SAndroid Build Coastguard Worker #ifndef SHRT_WIDTH
42*71db0c75SAndroid Build Coastguard Worker #ifdef __SHRT_WIDTH__
43*71db0c75SAndroid Build Coastguard Worker #define SHRT_WIDTH __SHRT_WIDTH__
44*71db0c75SAndroid Build Coastguard Worker #else
45*71db0c75SAndroid Build Coastguard Worker #define SHRT_WIDTH 16
46*71db0c75SAndroid Build Coastguard Worker #endif // __SHRT_WIDTH__
47*71db0c75SAndroid Build Coastguard Worker #endif // SHRT_WIDTH
48*71db0c75SAndroid Build Coastguard Worker 
49*71db0c75SAndroid Build Coastguard Worker #ifndef USHRT_WIDTH
50*71db0c75SAndroid Build Coastguard Worker #define USHRT_WIDTH SHRT_WIDTH
51*71db0c75SAndroid Build Coastguard Worker #endif // USHRT_WIDTH
52*71db0c75SAndroid Build Coastguard Worker 
53*71db0c75SAndroid Build Coastguard Worker #ifndef INT_WIDTH
54*71db0c75SAndroid Build Coastguard Worker #ifdef __INT_WIDTH__
55*71db0c75SAndroid Build Coastguard Worker #define INT_WIDTH __INT_WIDTH__
56*71db0c75SAndroid Build Coastguard Worker #else
57*71db0c75SAndroid Build Coastguard Worker #define INT_WIDTH 32
58*71db0c75SAndroid Build Coastguard Worker #endif // __INT_WIDTH__
59*71db0c75SAndroid Build Coastguard Worker #endif // INT_WIDTH
60*71db0c75SAndroid Build Coastguard Worker 
61*71db0c75SAndroid Build Coastguard Worker #ifndef UINT_WIDTH
62*71db0c75SAndroid Build Coastguard Worker #define UINT_WIDTH INT_WIDTH
63*71db0c75SAndroid Build Coastguard Worker #endif // UINT_WIDTH
64*71db0c75SAndroid Build Coastguard Worker 
65*71db0c75SAndroid Build Coastguard Worker #ifndef LONG_WIDTH
66*71db0c75SAndroid Build Coastguard Worker #ifdef __LONG_WIDTH__
67*71db0c75SAndroid Build Coastguard Worker #define LONG_WIDTH __LONG_WIDTH__
68*71db0c75SAndroid Build Coastguard Worker #elif defined(__WORDSIZE)
69*71db0c75SAndroid Build Coastguard Worker #define LONG_WIDTH __WORDSIZE
70*71db0c75SAndroid Build Coastguard Worker #else
71*71db0c75SAndroid Build Coastguard Worker // Use __SIZEOF_LONG__ * CHAR_BIT as backup.  This is needed for clang-13 or
72*71db0c75SAndroid Build Coastguard Worker // before.
73*71db0c75SAndroid Build Coastguard Worker #define LONG_WIDTH (__SIZEOF_LONG__ * CHAR_BIT)
74*71db0c75SAndroid Build Coastguard Worker #endif // __LONG_WIDTH__
75*71db0c75SAndroid Build Coastguard Worker #endif // LONG_WIDTH
76*71db0c75SAndroid Build Coastguard Worker 
77*71db0c75SAndroid Build Coastguard Worker #ifndef ULONG_WIDTH
78*71db0c75SAndroid Build Coastguard Worker #define ULONG_WIDTH LONG_WIDTH
79*71db0c75SAndroid Build Coastguard Worker #endif // ULONG_WIDTH
80*71db0c75SAndroid Build Coastguard Worker 
81*71db0c75SAndroid Build Coastguard Worker #ifndef LLONG_WIDTH
82*71db0c75SAndroid Build Coastguard Worker #ifdef __LLONG_WIDTH__
83*71db0c75SAndroid Build Coastguard Worker #define LLONG_WIDTH __LLONG_WIDTH__
84*71db0c75SAndroid Build Coastguard Worker #else
85*71db0c75SAndroid Build Coastguard Worker #define LLONG_WIDTH 64
86*71db0c75SAndroid Build Coastguard Worker #endif // __LLONG_WIDTH__
87*71db0c75SAndroid Build Coastguard Worker #endif // LLONG_WIDTH
88*71db0c75SAndroid Build Coastguard Worker 
89*71db0c75SAndroid Build Coastguard Worker #ifndef ULLONG_WIDTH
90*71db0c75SAndroid Build Coastguard Worker #define ULLONG_WIDTH LLONG_WIDTH
91*71db0c75SAndroid Build Coastguard Worker #endif // ULLONG_WIDTH
92*71db0c75SAndroid Build Coastguard Worker 
93*71db0c75SAndroid Build Coastguard Worker #ifndef BOOL_WIDTH
94*71db0c75SAndroid Build Coastguard Worker #ifdef __BOOL_WIDTH__
95*71db0c75SAndroid Build Coastguard Worker #define BOOL_WIDTH __BOOL_WIDTH__
96*71db0c75SAndroid Build Coastguard Worker #else
97*71db0c75SAndroid Build Coastguard Worker #define BOOL_WIDTH 1
98*71db0c75SAndroid Build Coastguard Worker #endif // __BOOL_WIDTH__
99*71db0c75SAndroid Build Coastguard Worker #endif // BOOL_WIDTH
100*71db0c75SAndroid Build Coastguard Worker 
101*71db0c75SAndroid Build Coastguard Worker // *_MAX macros
102*71db0c75SAndroid Build Coastguard Worker 
103*71db0c75SAndroid Build Coastguard Worker #ifndef SCHAR_MAX
104*71db0c75SAndroid Build Coastguard Worker #ifdef __SCHAR_MAX__
105*71db0c75SAndroid Build Coastguard Worker #define SCHAR_MAX __SCHAR_MAX__
106*71db0c75SAndroid Build Coastguard Worker #else
107*71db0c75SAndroid Build Coastguard Worker #define SCHAR_MAX 0x7f
108*71db0c75SAndroid Build Coastguard Worker #endif // __SCHAR_MAX__
109*71db0c75SAndroid Build Coastguard Worker #endif // SCHAR_MAX
110*71db0c75SAndroid Build Coastguard Worker 
111*71db0c75SAndroid Build Coastguard Worker #ifndef UCHAR_MAX
112*71db0c75SAndroid Build Coastguard Worker #define UCHAR_MAX (SCHAR_MAX * 2 + 1)
113*71db0c75SAndroid Build Coastguard Worker #endif // UCHAR_MAX
114*71db0c75SAndroid Build Coastguard Worker 
115*71db0c75SAndroid Build Coastguard Worker // Check if char is unsigned.
116*71db0c75SAndroid Build Coastguard Worker #if !defined(__CHAR_UNSIGNED__) && ('\xff' > 0)
117*71db0c75SAndroid Build Coastguard Worker #define __CHAR_UNSIGNED__
118*71db0c75SAndroid Build Coastguard Worker #endif
119*71db0c75SAndroid Build Coastguard Worker 
120*71db0c75SAndroid Build Coastguard Worker #ifndef CHAR_MAX
121*71db0c75SAndroid Build Coastguard Worker #ifdef __CHAR_UNSIGNED__
122*71db0c75SAndroid Build Coastguard Worker #define CHAR_MAX UCHAR_MAX
123*71db0c75SAndroid Build Coastguard Worker #else
124*71db0c75SAndroid Build Coastguard Worker #define CHAR_MAX SCHAR_MAX
125*71db0c75SAndroid Build Coastguard Worker #endif // __CHAR_UNSIGNED__
126*71db0c75SAndroid Build Coastguard Worker #endif // CHAR_MAX
127*71db0c75SAndroid Build Coastguard Worker 
128*71db0c75SAndroid Build Coastguard Worker #ifndef SHRT_MAX
129*71db0c75SAndroid Build Coastguard Worker #ifdef __SHRT_MAX__
130*71db0c75SAndroid Build Coastguard Worker #define SHRT_MAX __SHRT_MAX__
131*71db0c75SAndroid Build Coastguard Worker #else
132*71db0c75SAndroid Build Coastguard Worker #define SHRT_MAX 0x7fff
133*71db0c75SAndroid Build Coastguard Worker #endif // __SHRT_MAX__
134*71db0c75SAndroid Build Coastguard Worker #endif // SHRT_MAX
135*71db0c75SAndroid Build Coastguard Worker 
136*71db0c75SAndroid Build Coastguard Worker #ifndef USHRT_MAX
137*71db0c75SAndroid Build Coastguard Worker #define USHRT_MAX (SHRT_MAX * 2U + 1U)
138*71db0c75SAndroid Build Coastguard Worker #endif // USHRT_MAX
139*71db0c75SAndroid Build Coastguard Worker 
140*71db0c75SAndroid Build Coastguard Worker #ifndef INT_MAX
141*71db0c75SAndroid Build Coastguard Worker #ifdef __INT_MAX__
142*71db0c75SAndroid Build Coastguard Worker #define INT_MAX __INT_MAX__
143*71db0c75SAndroid Build Coastguard Worker #else
144*71db0c75SAndroid Build Coastguard Worker #define INT_MAX (0 ^ (1 << (INT_WIDTH - 1)))
145*71db0c75SAndroid Build Coastguard Worker #endif // __INT_MAX__
146*71db0c75SAndroid Build Coastguard Worker #endif // INT_MAX
147*71db0c75SAndroid Build Coastguard Worker 
148*71db0c75SAndroid Build Coastguard Worker #ifndef UINT_MAX
149*71db0c75SAndroid Build Coastguard Worker #define UINT_MAX (INT_MAX * 2U + 1U)
150*71db0c75SAndroid Build Coastguard Worker #endif // UINT_MAX
151*71db0c75SAndroid Build Coastguard Worker 
152*71db0c75SAndroid Build Coastguard Worker #ifndef LONG_MAX
153*71db0c75SAndroid Build Coastguard Worker #ifdef __LONG_MAX__
154*71db0c75SAndroid Build Coastguard Worker #define LONG_MAX __LONG_MAX__
155*71db0c75SAndroid Build Coastguard Worker #else
156*71db0c75SAndroid Build Coastguard Worker #define LONG_MAX (0L ^ (1L << (LONG_WIDTH - 1)))
157*71db0c75SAndroid Build Coastguard Worker #endif // __LONG_MAX__
158*71db0c75SAndroid Build Coastguard Worker #endif // LONG_MAX
159*71db0c75SAndroid Build Coastguard Worker 
160*71db0c75SAndroid Build Coastguard Worker #ifndef ULONG_MAX
161*71db0c75SAndroid Build Coastguard Worker #define ULONG_MAX (LONG_MAX * 2UL + 1UL)
162*71db0c75SAndroid Build Coastguard Worker #endif // ULONG_MAX
163*71db0c75SAndroid Build Coastguard Worker 
164*71db0c75SAndroid Build Coastguard Worker #ifndef LLONG_MAX
165*71db0c75SAndroid Build Coastguard Worker #ifdef __LONG_LONG_MAX__
166*71db0c75SAndroid Build Coastguard Worker #define LLONG_MAX __LONG_LONG_MAX__
167*71db0c75SAndroid Build Coastguard Worker #else
168*71db0c75SAndroid Build Coastguard Worker #define LLONG_MAX (0LL ^ (1LL << (LLONG_WIDTH - 1)))
169*71db0c75SAndroid Build Coastguard Worker #endif // __LONG_LONG_MAX__
170*71db0c75SAndroid Build Coastguard Worker #endif // LLONG_MAX
171*71db0c75SAndroid Build Coastguard Worker 
172*71db0c75SAndroid Build Coastguard Worker #ifndef ULLONG_MAX
173*71db0c75SAndroid Build Coastguard Worker #define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL)
174*71db0c75SAndroid Build Coastguard Worker #endif // ULLONG_MAX
175*71db0c75SAndroid Build Coastguard Worker 
176*71db0c75SAndroid Build Coastguard Worker // *_MIN macros
177*71db0c75SAndroid Build Coastguard Worker 
178*71db0c75SAndroid Build Coastguard Worker #ifndef SCHAR_MIN
179*71db0c75SAndroid Build Coastguard Worker #define SCHAR_MIN (-SCHAR_MAX - 1)
180*71db0c75SAndroid Build Coastguard Worker #endif // SCHAR_MIN
181*71db0c75SAndroid Build Coastguard Worker 
182*71db0c75SAndroid Build Coastguard Worker #ifndef UCHAR_MIN
183*71db0c75SAndroid Build Coastguard Worker #define UCHAR_MIN 0
184*71db0c75SAndroid Build Coastguard Worker #endif // UCHAR_MIN
185*71db0c75SAndroid Build Coastguard Worker 
186*71db0c75SAndroid Build Coastguard Worker #ifndef CHAR_MIN
187*71db0c75SAndroid Build Coastguard Worker #ifdef __CHAR_UNSIGNED__
188*71db0c75SAndroid Build Coastguard Worker #define CHAR_MIN UCHAR_MIN
189*71db0c75SAndroid Build Coastguard Worker #else
190*71db0c75SAndroid Build Coastguard Worker #define CHAR_MIN SCHAR_MIN
191*71db0c75SAndroid Build Coastguard Worker #endif // __CHAR_UNSIGNED__
192*71db0c75SAndroid Build Coastguard Worker #endif // CHAR_MIN
193*71db0c75SAndroid Build Coastguard Worker 
194*71db0c75SAndroid Build Coastguard Worker #ifndef SHRT_MIN
195*71db0c75SAndroid Build Coastguard Worker #define SHRT_MIN (-SHRT_MAX - 1)
196*71db0c75SAndroid Build Coastguard Worker #endif // SHRT_MIN
197*71db0c75SAndroid Build Coastguard Worker 
198*71db0c75SAndroid Build Coastguard Worker #ifndef USHRT_MIN
199*71db0c75SAndroid Build Coastguard Worker #define USHRT_MIN 0U
200*71db0c75SAndroid Build Coastguard Worker #endif // USHRT_MIN
201*71db0c75SAndroid Build Coastguard Worker 
202*71db0c75SAndroid Build Coastguard Worker #ifndef INT_MIN
203*71db0c75SAndroid Build Coastguard Worker #define INT_MIN (-INT_MAX - 1)
204*71db0c75SAndroid Build Coastguard Worker #endif // INT_MIN
205*71db0c75SAndroid Build Coastguard Worker 
206*71db0c75SAndroid Build Coastguard Worker #ifndef UINT_MIN
207*71db0c75SAndroid Build Coastguard Worker #define UINT_MIN 0U
208*71db0c75SAndroid Build Coastguard Worker #endif // UINT_MIN
209*71db0c75SAndroid Build Coastguard Worker 
210*71db0c75SAndroid Build Coastguard Worker #ifndef LONG_MIN
211*71db0c75SAndroid Build Coastguard Worker #define LONG_MIN (-LONG_MAX - 1L)
212*71db0c75SAndroid Build Coastguard Worker #endif // LONG_MIN
213*71db0c75SAndroid Build Coastguard Worker 
214*71db0c75SAndroid Build Coastguard Worker #ifndef ULONG_MIN
215*71db0c75SAndroid Build Coastguard Worker #define ULONG_MIN 0UL
216*71db0c75SAndroid Build Coastguard Worker #endif // ULONG_MIN
217*71db0c75SAndroid Build Coastguard Worker 
218*71db0c75SAndroid Build Coastguard Worker #ifndef LLONG_MIN
219*71db0c75SAndroid Build Coastguard Worker #define LLONG_MIN (-LLONG_MAX - 1LL)
220*71db0c75SAndroid Build Coastguard Worker #endif // LLONG_MIN
221*71db0c75SAndroid Build Coastguard Worker 
222*71db0c75SAndroid Build Coastguard Worker #ifndef ULLONG_MIN
223*71db0c75SAndroid Build Coastguard Worker #define ULLONG_MIN 0ULL
224*71db0c75SAndroid Build Coastguard Worker #endif // ULLONG_MIN
225*71db0c75SAndroid Build Coastguard Worker 
226*71db0c75SAndroid Build Coastguard Worker #ifndef _POSIX_MAX_CANON
227*71db0c75SAndroid Build Coastguard Worker #define _POSIX_MAX_CANON 255
228*71db0c75SAndroid Build Coastguard Worker #endif
229*71db0c75SAndroid Build Coastguard Worker 
230*71db0c75SAndroid Build Coastguard Worker #ifndef _POSIX_MAX_INPUT
231*71db0c75SAndroid Build Coastguard Worker #define _POSIX_MAX_INPUT 255
232*71db0c75SAndroid Build Coastguard Worker #endif
233*71db0c75SAndroid Build Coastguard Worker 
234*71db0c75SAndroid Build Coastguard Worker #ifndef _POSIX_NAME_MAX
235*71db0c75SAndroid Build Coastguard Worker #define _POSIX_PATH_MAX 256
236*71db0c75SAndroid Build Coastguard Worker #endif
237*71db0c75SAndroid Build Coastguard Worker 
238*71db0c75SAndroid Build Coastguard Worker #endif // LLVM_LIBC_MACROS_LIMITS_MACROS_H
239