[LICM] allow MemoryAccess creation failure (#116813)
[llvm-project.git] / libc / include / llvm-libc-macros / limits-macros.h
blobd4aa7ae539e8aaa41beac68e9865d31a0d0090c4
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 //===----------------------------------------------------------------------===//
9 #ifndef LLVM_LIBC_MACROS_LIMITS_MACROS_H
10 #define LLVM_LIBC_MACROS_LIMITS_MACROS_H
12 // Define all C23 macro constants of limits.h
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
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
27 // *_WIDTH macros
29 #ifndef CHAR_WIDTH
30 #define CHAR_WIDTH CHAR_BIT
31 #endif // CHAR_WIDTH
33 #ifndef SCHAR_WIDTH
34 #define SCHAR_WIDTH CHAR_BIT
35 #endif // SCHAR_WIDTH
37 #ifndef UCHAR_WIDTH
38 #define UCHAR_WIDTH CHAR_BIT
39 #endif // UCHAR_WIDTH
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
49 #ifndef USHRT_WIDTH
50 #define USHRT_WIDTH SHRT_WIDTH
51 #endif // USHRT_WIDTH
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
61 #ifndef UINT_WIDTH
62 #define UINT_WIDTH INT_WIDTH
63 #endif // UINT_WIDTH
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
77 #ifndef ULONG_WIDTH
78 #define ULONG_WIDTH LONG_WIDTH
79 #endif // ULONG_WIDTH
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
89 #ifndef ULLONG_WIDTH
90 #define ULLONG_WIDTH LLONG_WIDTH
91 #endif // ULLONG_WIDTH
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
101 // *_MAX macros
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
111 #ifndef UCHAR_MAX
112 #define UCHAR_MAX (SCHAR_MAX * 2 + 1)
113 #endif // UCHAR_MAX
115 // Check if char is unsigned.
116 #if !defined(__CHAR_UNSIGNED__) && ('\xff' > 0)
117 #define __CHAR_UNSIGNED__
118 #endif
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
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
136 #ifndef USHRT_MAX
137 #define USHRT_MAX (SHRT_MAX * 2U + 1U)
138 #endif // USHRT_MAX
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
148 #ifndef UINT_MAX
149 #define UINT_MAX (INT_MAX * 2U + 1U)
150 #endif // UINT_MAX
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
160 #ifndef ULONG_MAX
161 #define ULONG_MAX (LONG_MAX * 2UL + 1UL)
162 #endif // ULONG_MAX
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
172 #ifndef ULLONG_MAX
173 #define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL)
174 #endif // ULLONG_MAX
176 // *_MIN macros
178 #ifndef SCHAR_MIN
179 #define SCHAR_MIN (-SCHAR_MAX - 1)
180 #endif // SCHAR_MIN
182 #ifndef UCHAR_MIN
183 #define UCHAR_MIN 0
184 #endif // UCHAR_MIN
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
194 #ifndef SHRT_MIN
195 #define SHRT_MIN (-SHRT_MAX - 1)
196 #endif // SHRT_MIN
198 #ifndef USHRT_MIN
199 #define USHRT_MIN 0U
200 #endif // USHRT_MIN
202 #ifndef INT_MIN
203 #define INT_MIN (-INT_MAX - 1)
204 #endif // INT_MIN
206 #ifndef UINT_MIN
207 #define UINT_MIN 0U
208 #endif // UINT_MIN
210 #ifndef LONG_MIN
211 #define LONG_MIN (-LONG_MAX - 1L)
212 #endif // LONG_MIN
214 #ifndef ULONG_MIN
215 #define ULONG_MIN 0UL
216 #endif // ULONG_MIN
218 #ifndef LLONG_MIN
219 #define LLONG_MIN (-LLONG_MAX - 1LL)
220 #endif // LLONG_MIN
222 #ifndef ULLONG_MIN
223 #define ULLONG_MIN 0ULL
224 #endif // ULLONG_MIN
226 #ifndef _POSIX_MAX_CANON
227 #define _POSIX_MAX_CANON 255
228 #endif
230 #ifndef _POSIX_MAX_INPUT
231 #define _POSIX_MAX_INPUT 255
232 #endif
234 #ifndef _POSIX_NAME_MAX
235 #define _POSIX_PATH_MAX 256
236 #endif
238 #endif // LLVM_LIBC_MACROS_LIMITS_MACROS_H