Warning: This file is not a C or C++ file. It does not have highlighting.

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

Warning: This file is not a C or C++ file. It does not have highlighting.

source code of libc/include/llvm-libc-macros/limits-macros.h