1/*===---- stdint.h - Standard header for sized integer types --------------===*\
2 *
3 * Copyright (c) 2009 Chris Lattner
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining a copy
6 * of this software and associated documentation files (the "Software"), to deal
7 * in the Software without restriction, including without limitation the rights
8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 * copies of the Software, and to permit persons to whom the Software is
10 * furnished to do so, subject to the following conditions:
11 *
12 * The above copyright notice and this permission notice shall be included in
13 * all copies or substantial portions of the Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 * THE SOFTWARE.
22 *
23\*===----------------------------------------------------------------------===*/
24
25#ifndef __CLANG_STDINT_H
26#define __CLANG_STDINT_H
27
28/* If we're hosted, fall back to the system's stdint.h, which might have
29 * additional definitions.
30 */
31#if __STDC_HOSTED__ && __has_include_next(<stdint.h>)
32
33// C99 7.18.3 Limits of other integer types
34//
35//  Footnote 219, 220: C++ implementations should define these macros only when
36//  __STDC_LIMIT_MACROS is defined before <stdint.h> is included.
37//
38//  Footnote 222: C++ implementations should define these macros only when
39//  __STDC_CONSTANT_MACROS is defined before <stdint.h> is included.
40//
41// C++11 [cstdint.syn]p2:
42//
43//  The macros defined by <cstdint> are provided unconditionally. In particular,
44//  the symbols __STDC_LIMIT_MACROS and __STDC_CONSTANT_MACROS (mentioned in
45//  footnotes 219, 220, and 222 in the C standard) play no role in C++.
46//
47// C11 removed the problematic footnotes.
48//
49// Work around this inconsistency by always defining those macros in C++ mode,
50// so that a C library implementation which follows the C99 standard can be
51// used in C++.
52# ifdef __cplusplus
53#  if !defined(__STDC_LIMIT_MACROS)
54#   define __STDC_LIMIT_MACROS
55#   define __STDC_LIMIT_MACROS_DEFINED_BY_CLANG
56#  endif
57#  if !defined(__STDC_CONSTANT_MACROS)
58#   define __STDC_CONSTANT_MACROS
59#   define __STDC_CONSTANT_MACROS_DEFINED_BY_CLANG
60#  endif
61# endif
62
63# include_next <stdint.h>
64
65# ifdef __STDC_LIMIT_MACROS_DEFINED_BY_CLANG
66#  undef __STDC_LIMIT_MACROS
67#  undef __STDC_LIMIT_MACROS_DEFINED_BY_CLANG
68# endif
69# ifdef __STDC_CONSTANT_MACROS_DEFINED_BY_CLANG
70#  undef __STDC_CONSTANT_MACROS
71#  undef __STDC_CONSTANT_MACROS_DEFINED_BY_CLANG
72# endif
73
74#else
75
76/* C99 7.18.1.1 Exact-width integer types.
77 * C99 7.18.1.2 Minimum-width integer types.
78 * C99 7.18.1.3 Fastest minimum-width integer types.
79 *
80 * The standard requires that exact-width type be defined for 8-, 16-, 32-, and
81 * 64-bit types if they are implemented. Other exact width types are optional.
82 * This implementation defines an exact-width types for every integer width
83 * that is represented in the standard integer types.
84 *
85 * The standard also requires minimum-width types be defined for 8-, 16-, 32-,
86 * and 64-bit widths regardless of whether there are corresponding exact-width
87 * types.
88 *
89 * To accommodate targets that are missing types that are exactly 8, 16, 32, or
90 * 64 bits wide, this implementation takes an approach of cascading
91 * redefintions, redefining __int_leastN_t to successively smaller exact-width
92 * types. It is therefore important that the types are defined in order of
93 * descending widths.
94 *
95 * We currently assume that the minimum-width types and the fastest
96 * minimum-width types are the same. This is allowed by the standard, but is
97 * suboptimal.
98 *
99 * In violation of the standard, some targets do not implement a type that is
100 * wide enough to represent all of the required widths (8-, 16-, 32-, 64-bit).
101 * To accommodate these targets, a required minimum-width type is only
102 * defined if there exists an exact-width type of equal or greater width.
103 */
104
105#ifdef __INT64_TYPE__
106# ifndef __int8_t_defined /* glibc sys/types.h also defines int64_t*/
107typedef signed __INT64_TYPE__ int64_t;
108# endif /* __int8_t_defined */
109typedef unsigned __INT64_TYPE__ uint64_t;
110# define __int_least64_t int64_t
111# define __uint_least64_t uint64_t
112# define __int_least32_t int64_t
113# define __uint_least32_t uint64_t
114# define __int_least16_t int64_t
115# define __uint_least16_t uint64_t
116# define __int_least8_t int64_t
117# define __uint_least8_t uint64_t
118#endif /* __INT64_TYPE__ */
119
120#ifdef __int_least64_t
121typedef __int_least64_t int_least64_t;
122typedef __uint_least64_t uint_least64_t;
123typedef __int_least64_t int_fast64_t;
124typedef __uint_least64_t uint_fast64_t;
125#endif /* __int_least64_t */
126
127#ifdef __INT56_TYPE__
128typedef signed __INT56_TYPE__ int56_t;
129typedef unsigned __INT56_TYPE__ uint56_t;
130typedef int56_t int_least56_t;
131typedef uint56_t uint_least56_t;
132typedef int56_t int_fast56_t;
133typedef uint56_t uint_fast56_t;
134# define __int_least32_t int56_t
135# define __uint_least32_t uint56_t
136# define __int_least16_t int56_t
137# define __uint_least16_t uint56_t
138# define __int_least8_t int56_t
139# define __uint_least8_t uint56_t
140#endif /* __INT56_TYPE__ */
141
142
143#ifdef __INT48_TYPE__
144typedef signed __INT48_TYPE__ int48_t;
145typedef unsigned __INT48_TYPE__ uint48_t;
146typedef int48_t int_least48_t;
147typedef uint48_t uint_least48_t;
148typedef int48_t int_fast48_t;
149typedef uint48_t uint_fast48_t;
150# define __int_least32_t int48_t
151# define __uint_least32_t uint48_t
152# define __int_least16_t int48_t
153# define __uint_least16_t uint48_t
154# define __int_least8_t int48_t
155# define __uint_least8_t uint48_t
156#endif /* __INT48_TYPE__ */
157
158
159#ifdef __INT40_TYPE__
160typedef signed __INT40_TYPE__ int40_t;
161typedef unsigned __INT40_TYPE__ uint40_t;
162typedef int40_t int_least40_t;
163typedef uint40_t uint_least40_t;
164typedef int40_t int_fast40_t;
165typedef uint40_t uint_fast40_t;
166# define __int_least32_t int40_t
167# define __uint_least32_t uint40_t
168# define __int_least16_t int40_t
169# define __uint_least16_t uint40_t
170# define __int_least8_t int40_t
171# define __uint_least8_t uint40_t
172#endif /* __INT40_TYPE__ */
173
174
175#ifdef __INT32_TYPE__
176
177# ifndef __int8_t_defined /* glibc sys/types.h also defines int32_t*/
178typedef signed __INT32_TYPE__ int32_t;
179# endif /* __int8_t_defined */
180
181# ifndef __uint32_t_defined  /* more glibc compatibility */
182# define __uint32_t_defined
183typedef unsigned __INT32_TYPE__ uint32_t;
184# endif /* __uint32_t_defined */
185
186# define __int_least32_t int32_t
187# define __uint_least32_t uint32_t
188# define __int_least16_t int32_t
189# define __uint_least16_t uint32_t
190# define __int_least8_t int32_t
191# define __uint_least8_t uint32_t
192#endif /* __INT32_TYPE__ */
193
194#ifdef __int_least32_t
195typedef __int_least32_t int_least32_t;
196typedef __uint_least32_t uint_least32_t;
197typedef __int_least32_t int_fast32_t;
198typedef __uint_least32_t uint_fast32_t;
199#endif /* __int_least32_t */
200
201#ifdef __INT24_TYPE__
202typedef signed __INT24_TYPE__ int24_t;
203typedef unsigned __INT24_TYPE__ uint24_t;
204typedef int24_t int_least24_t;
205typedef uint24_t uint_least24_t;
206typedef int24_t int_fast24_t;
207typedef uint24_t uint_fast24_t;
208# define __int_least16_t int24_t
209# define __uint_least16_t uint24_t
210# define __int_least8_t int24_t
211# define __uint_least8_t uint24_t
212#endif /* __INT24_TYPE__ */
213
214#ifdef __INT16_TYPE__
215#ifndef __int8_t_defined /* glibc sys/types.h also defines int16_t*/
216typedef signed __INT16_TYPE__ int16_t;
217#endif /* __int8_t_defined */
218typedef unsigned __INT16_TYPE__ uint16_t;
219# define __int_least16_t int16_t
220# define __uint_least16_t uint16_t
221# define __int_least8_t int16_t
222# define __uint_least8_t uint16_t
223#endif /* __INT16_TYPE__ */
224
225#ifdef __int_least16_t
226typedef __int_least16_t int_least16_t;
227typedef __uint_least16_t uint_least16_t;
228typedef __int_least16_t int_fast16_t;
229typedef __uint_least16_t uint_fast16_t;
230#endif /* __int_least16_t */
231
232
233#ifdef __INT8_TYPE__
234#ifndef __int8_t_defined  /* glibc sys/types.h also defines int8_t*/
235typedef signed __INT8_TYPE__ int8_t;
236#endif /* __int8_t_defined */
237typedef unsigned __INT8_TYPE__ uint8_t;
238# define __int_least8_t int8_t
239# define __uint_least8_t uint8_t
240#endif /* __INT8_TYPE__ */
241
242#ifdef __int_least8_t
243typedef __int_least8_t int_least8_t;
244typedef __uint_least8_t uint_least8_t;
245typedef __int_least8_t int_fast8_t;
246typedef __uint_least8_t uint_fast8_t;
247#endif /* __int_least8_t */
248
249/* prevent glibc sys/types.h from defining conflicting types */
250#ifndef __int8_t_defined
251# define __int8_t_defined
252#endif /* __int8_t_defined */
253
254/* C99 7.18.1.4 Integer types capable of holding object pointers.
255 */
256#define __stdint_join3(a,b,c) a ## b ## c
257
258#define  __intn_t(n) __stdint_join3( int, n, _t)
259#define __uintn_t(n) __stdint_join3(uint, n, _t)
260
261#ifndef _INTPTR_T
262#ifndef __intptr_t_defined
263typedef  __intn_t(__INTPTR_WIDTH__)  intptr_t;
264#define __intptr_t_defined
265#define _INTPTR_T
266#endif
267#endif
268
269#ifndef _UINTPTR_T
270typedef __uintn_t(__INTPTR_WIDTH__) uintptr_t;
271#define _UINTPTR_T
272#endif
273
274/* C99 7.18.1.5 Greatest-width integer types.
275 */
276typedef __INTMAX_TYPE__  intmax_t;
277typedef __UINTMAX_TYPE__ uintmax_t;
278
279/* C99 7.18.4 Macros for minimum-width integer constants.
280 *
281 * The standard requires that integer constant macros be defined for all the
282 * minimum-width types defined above. As 8-, 16-, 32-, and 64-bit minimum-width
283 * types are required, the corresponding integer constant macros are defined
284 * here. This implementation also defines minimum-width types for every other
285 * integer width that the target implements, so corresponding macros are
286 * defined below, too.
287 *
288 * These macros are defined using the same successive-shrinking approach as
289 * the type definitions above. It is likewise important that macros are defined
290 * in order of decending width.
291 *
292 * Note that C++ should not check __STDC_CONSTANT_MACROS here, contrary to the
293 * claims of the C standard (see C++ 18.3.1p2, [cstdint.syn]).
294 */
295
296#define __int_c_join(a, b) a ## b
297#define __int_c(v, suffix) __int_c_join(v, suffix)
298#define __uint_c(v, suffix) __int_c_join(v##U, suffix)
299
300
301#ifdef __INT64_TYPE__
302# ifdef __INT64_C_SUFFIX__
303#  define __int64_c_suffix __INT64_C_SUFFIX__
304#  define __int32_c_suffix __INT64_C_SUFFIX__
305#  define __int16_c_suffix __INT64_C_SUFFIX__
306#  define  __int8_c_suffix __INT64_C_SUFFIX__
307# else
308#  undef __int64_c_suffix
309#  undef __int32_c_suffix
310#  undef __int16_c_suffix
311#  undef  __int8_c_suffix
312# endif /* __INT64_C_SUFFIX__ */
313#endif /* __INT64_TYPE__ */
314
315#ifdef __int_least64_t
316# ifdef __int64_c_suffix
317#  define INT64_C(v) __int_c(v, __int64_c_suffix)
318#  define UINT64_C(v) __uint_c(v, __int64_c_suffix)
319# else
320#  define INT64_C(v) v
321#  define UINT64_C(v) v ## U
322# endif /* __int64_c_suffix */
323#endif /* __int_least64_t */
324
325
326#ifdef __INT56_TYPE__
327# ifdef __INT56_C_SUFFIX__
328#  define INT56_C(v) __int_c(v, __INT56_C_SUFFIX__)
329#  define UINT56_C(v) __uint_c(v, __INT56_C_SUFFIX__)
330#  define __int32_c_suffix __INT56_C_SUFFIX__
331#  define __int16_c_suffix __INT56_C_SUFFIX__
332#  define __int8_c_suffix  __INT56_C_SUFFIX__
333# else
334#  define INT56_C(v) v
335#  define UINT56_C(v) v ## U
336#  undef __int32_c_suffix
337#  undef __int16_c_suffix
338#  undef  __int8_c_suffix
339# endif /* __INT56_C_SUFFIX__ */
340#endif /* __INT56_TYPE__ */
341
342
343#ifdef __INT48_TYPE__
344# ifdef __INT48_C_SUFFIX__
345#  define INT48_C(v) __int_c(v, __INT48_C_SUFFIX__)
346#  define UINT48_C(v) __uint_c(v, __INT48_C_SUFFIX__)
347#  define __int32_c_suffix __INT48_C_SUFFIX__
348#  define __int16_c_suffix __INT48_C_SUFFIX__
349#  define __int8_c_suffix  __INT48_C_SUFFIX__
350# else
351#  define INT48_C(v) v
352#  define UINT48_C(v) v ## U
353#  undef __int32_c_suffix
354#  undef __int16_c_suffix
355#  undef  __int8_c_suffix
356# endif /* __INT48_C_SUFFIX__ */
357#endif /* __INT48_TYPE__ */
358
359
360#ifdef __INT40_TYPE__
361# ifdef __INT40_C_SUFFIX__
362#  define INT40_C(v) __int_c(v, __INT40_C_SUFFIX__)
363#  define UINT40_C(v) __uint_c(v, __INT40_C_SUFFIX__)
364#  define __int32_c_suffix __INT40_C_SUFFIX__
365#  define __int16_c_suffix __INT40_C_SUFFIX__
366#  define __int8_c_suffix  __INT40_C_SUFFIX__
367# else
368#  define INT40_C(v) v
369#  define UINT40_C(v) v ## U
370#  undef __int32_c_suffix
371#  undef __int16_c_suffix
372#  undef  __int8_c_suffix
373# endif /* __INT40_C_SUFFIX__ */
374#endif /* __INT40_TYPE__ */
375
376
377#ifdef __INT32_TYPE__
378# ifdef __INT32_C_SUFFIX__
379#  define __int32_c_suffix __INT32_C_SUFFIX__
380#  define __int16_c_suffix __INT32_C_SUFFIX__
381#  define __int8_c_suffix  __INT32_C_SUFFIX__
382#else
383#  undef __int32_c_suffix
384#  undef __int16_c_suffix
385#  undef  __int8_c_suffix
386# endif /* __INT32_C_SUFFIX__ */
387#endif /* __INT32_TYPE__ */
388
389#ifdef __int_least32_t
390# ifdef __int32_c_suffix
391#  define INT32_C(v) __int_c(v, __int32_c_suffix)
392#  define UINT32_C(v) __uint_c(v, __int32_c_suffix)
393# else
394#  define INT32_C(v) v
395#  define UINT32_C(v) v ## U
396# endif /* __int32_c_suffix */
397#endif /* __int_least32_t */
398
399
400#ifdef __INT24_TYPE__
401# ifdef __INT24_C_SUFFIX__
402#  define INT24_C(v) __int_c(v, __INT24_C_SUFFIX__)
403#  define UINT24_C(v) __uint_c(v, __INT24_C_SUFFIX__)
404#  define __int16_c_suffix __INT24_C_SUFFIX__
405#  define __int8_c_suffix  __INT24_C_SUFFIX__
406# else
407#  define INT24_C(v) v
408#  define UINT24_C(v) v ## U
409#  undef __int16_c_suffix
410#  undef  __int8_c_suffix
411# endif /* __INT24_C_SUFFIX__ */
412#endif /* __INT24_TYPE__ */
413
414
415#ifdef __INT16_TYPE__
416# ifdef __INT16_C_SUFFIX__
417#  define __int16_c_suffix __INT16_C_SUFFIX__
418#  define __int8_c_suffix  __INT16_C_SUFFIX__
419#else
420#  undef __int16_c_suffix
421#  undef  __int8_c_suffix
422# endif /* __INT16_C_SUFFIX__ */
423#endif /* __INT16_TYPE__ */
424
425#ifdef __int_least16_t
426# ifdef __int16_c_suffix
427#  define INT16_C(v) __int_c(v, __int16_c_suffix)
428#  define UINT16_C(v) __uint_c(v, __int16_c_suffix)
429# else
430#  define INT16_C(v) v
431#  define UINT16_C(v) v ## U
432# endif /* __int16_c_suffix */
433#endif /* __int_least16_t */
434
435
436#ifdef __INT8_TYPE__
437# ifdef __INT8_C_SUFFIX__
438#  define __int8_c_suffix __INT8_C_SUFFIX__
439#else
440#  undef  __int8_c_suffix
441# endif /* __INT8_C_SUFFIX__ */
442#endif /* __INT8_TYPE__ */
443
444#ifdef __int_least8_t
445# ifdef __int8_c_suffix
446#  define INT8_C(v) __int_c(v, __int8_c_suffix)
447#  define UINT8_C(v) __uint_c(v, __int8_c_suffix)
448# else
449#  define INT8_C(v) v
450#  define UINT8_C(v) v ## U
451# endif /* __int8_c_suffix */
452#endif /* __int_least8_t */
453
454
455/* C99 7.18.2.1 Limits of exact-width integer types.
456 * C99 7.18.2.2 Limits of minimum-width integer types.
457 * C99 7.18.2.3 Limits of fastest minimum-width integer types.
458 *
459 * The presence of limit macros are completely optional in C99.  This
460 * implementation defines limits for all of the types (exact- and
461 * minimum-width) that it defines above, using the limits of the minimum-width
462 * type for any types that do not have exact-width representations.
463 *
464 * As in the type definitions, this section takes an approach of
465 * successive-shrinking to determine which limits to use for the standard (8,
466 * 16, 32, 64) bit widths when they don't have exact representations. It is
467 * therefore important that the defintions be kept in order of decending
468 * widths.
469 *
470 * Note that C++ should not check __STDC_LIMIT_MACROS here, contrary to the
471 * claims of the C standard (see C++ 18.3.1p2, [cstdint.syn]).
472 */
473
474#ifdef __INT64_TYPE__
475# define INT64_MAX           INT64_C( 9223372036854775807)
476# define INT64_MIN         (-INT64_C( 9223372036854775807)-1)
477# define UINT64_MAX         UINT64_C(18446744073709551615)
478# define __INT_LEAST64_MIN   INT64_MIN
479# define __INT_LEAST64_MAX   INT64_MAX
480# define __UINT_LEAST64_MAX UINT64_MAX
481# define __INT_LEAST32_MIN   INT64_MIN
482# define __INT_LEAST32_MAX   INT64_MAX
483# define __UINT_LEAST32_MAX UINT64_MAX
484# define __INT_LEAST16_MIN   INT64_MIN
485# define __INT_LEAST16_MAX   INT64_MAX
486# define __UINT_LEAST16_MAX UINT64_MAX
487# define __INT_LEAST8_MIN    INT64_MIN
488# define __INT_LEAST8_MAX    INT64_MAX
489# define __UINT_LEAST8_MAX  UINT64_MAX
490#endif /* __INT64_TYPE__ */
491
492#ifdef __INT_LEAST64_MIN
493# define INT_LEAST64_MIN   __INT_LEAST64_MIN
494# define INT_LEAST64_MAX   __INT_LEAST64_MAX
495# define UINT_LEAST64_MAX __UINT_LEAST64_MAX
496# define INT_FAST64_MIN    __INT_LEAST64_MIN
497# define INT_FAST64_MAX    __INT_LEAST64_MAX
498# define UINT_FAST64_MAX  __UINT_LEAST64_MAX
499#endif /* __INT_LEAST64_MIN */
500
501
502#ifdef __INT56_TYPE__
503# define INT56_MAX           INT56_C(36028797018963967)
504# define INT56_MIN         (-INT56_C(36028797018963967)-1)
505# define UINT56_MAX         UINT56_C(72057594037927935)
506# define INT_LEAST56_MIN     INT56_MIN
507# define INT_LEAST56_MAX     INT56_MAX
508# define UINT_LEAST56_MAX   UINT56_MAX
509# define INT_FAST56_MIN      INT56_MIN
510# define INT_FAST56_MAX      INT56_MAX
511# define UINT_FAST56_MAX    UINT56_MAX
512# define __INT_LEAST32_MIN   INT56_MIN
513# define __INT_LEAST32_MAX   INT56_MAX
514# define __UINT_LEAST32_MAX UINT56_MAX
515# define __INT_LEAST16_MIN   INT56_MIN
516# define __INT_LEAST16_MAX   INT56_MAX
517# define __UINT_LEAST16_MAX UINT56_MAX
518# define __INT_LEAST8_MIN    INT56_MIN
519# define __INT_LEAST8_MAX    INT56_MAX
520# define __UINT_LEAST8_MAX  UINT56_MAX
521#endif /* __INT56_TYPE__ */
522
523
524#ifdef __INT48_TYPE__
525# define INT48_MAX           INT48_C(140737488355327)
526# define INT48_MIN         (-INT48_C(140737488355327)-1)
527# define UINT48_MAX         UINT48_C(281474976710655)
528# define INT_LEAST48_MIN     INT48_MIN
529# define INT_LEAST48_MAX     INT48_MAX
530# define UINT_LEAST48_MAX   UINT48_MAX
531# define INT_FAST48_MIN      INT48_MIN
532# define INT_FAST48_MAX      INT48_MAX
533# define UINT_FAST48_MAX    UINT48_MAX
534# define __INT_LEAST32_MIN   INT48_MIN
535# define __INT_LEAST32_MAX   INT48_MAX
536# define __UINT_LEAST32_MAX UINT48_MAX
537# define __INT_LEAST16_MIN   INT48_MIN
538# define __INT_LEAST16_MAX   INT48_MAX
539# define __UINT_LEAST16_MAX UINT48_MAX
540# define __INT_LEAST8_MIN    INT48_MIN
541# define __INT_LEAST8_MAX    INT48_MAX
542# define __UINT_LEAST8_MAX  UINT48_MAX
543#endif /* __INT48_TYPE__ */
544
545
546#ifdef __INT40_TYPE__
547# define INT40_MAX           INT40_C(549755813887)
548# define INT40_MIN         (-INT40_C(549755813887)-1)
549# define UINT40_MAX         UINT40_C(1099511627775)
550# define INT_LEAST40_MIN     INT40_MIN
551# define INT_LEAST40_MAX     INT40_MAX
552# define UINT_LEAST40_MAX   UINT40_MAX
553# define INT_FAST40_MIN      INT40_MIN
554# define INT_FAST40_MAX      INT40_MAX
555# define UINT_FAST40_MAX    UINT40_MAX
556# define __INT_LEAST32_MIN   INT40_MIN
557# define __INT_LEAST32_MAX   INT40_MAX
558# define __UINT_LEAST32_MAX UINT40_MAX
559# define __INT_LEAST16_MIN   INT40_MIN
560# define __INT_LEAST16_MAX   INT40_MAX
561# define __UINT_LEAST16_MAX UINT40_MAX
562# define __INT_LEAST8_MIN    INT40_MIN
563# define __INT_LEAST8_MAX    INT40_MAX
564# define __UINT_LEAST8_MAX  UINT40_MAX
565#endif /* __INT40_TYPE__ */
566
567
568#ifdef __INT32_TYPE__
569# define INT32_MAX           INT32_C(2147483647)
570# define INT32_MIN         (-INT32_C(2147483647)-1)
571# define UINT32_MAX         UINT32_C(4294967295)
572# define __INT_LEAST32_MIN   INT32_MIN
573# define __INT_LEAST32_MAX   INT32_MAX
574# define __UINT_LEAST32_MAX UINT32_MAX
575# define __INT_LEAST16_MIN   INT32_MIN
576# define __INT_LEAST16_MAX   INT32_MAX
577# define __UINT_LEAST16_MAX UINT32_MAX
578# define __INT_LEAST8_MIN    INT32_MIN
579# define __INT_LEAST8_MAX    INT32_MAX
580# define __UINT_LEAST8_MAX  UINT32_MAX
581#endif /* __INT32_TYPE__ */
582
583#ifdef __INT_LEAST32_MIN
584# define INT_LEAST32_MIN   __INT_LEAST32_MIN
585# define INT_LEAST32_MAX   __INT_LEAST32_MAX
586# define UINT_LEAST32_MAX __UINT_LEAST32_MAX
587# define INT_FAST32_MIN    __INT_LEAST32_MIN
588# define INT_FAST32_MAX    __INT_LEAST32_MAX
589# define UINT_FAST32_MAX  __UINT_LEAST32_MAX
590#endif /* __INT_LEAST32_MIN */
591
592
593#ifdef __INT24_TYPE__
594# define INT24_MAX           INT24_C(8388607)
595# define INT24_MIN         (-INT24_C(8388607)-1)
596# define UINT24_MAX         UINT24_C(16777215)
597# define INT_LEAST24_MIN     INT24_MIN
598# define INT_LEAST24_MAX     INT24_MAX
599# define UINT_LEAST24_MAX   UINT24_MAX
600# define INT_FAST24_MIN      INT24_MIN
601# define INT_FAST24_MAX      INT24_MAX
602# define UINT_FAST24_MAX    UINT24_MAX
603# define __INT_LEAST16_MIN   INT24_MIN
604# define __INT_LEAST16_MAX   INT24_MAX
605# define __UINT_LEAST16_MAX UINT24_MAX
606# define __INT_LEAST8_MIN    INT24_MIN
607# define __INT_LEAST8_MAX    INT24_MAX
608# define __UINT_LEAST8_MAX  UINT24_MAX
609#endif /* __INT24_TYPE__ */
610
611
612#ifdef __INT16_TYPE__
613#define INT16_MAX            INT16_C(32767)
614#define INT16_MIN          (-INT16_C(32767)-1)
615#define UINT16_MAX          UINT16_C(65535)
616# define __INT_LEAST16_MIN   INT16_MIN
617# define __INT_LEAST16_MAX   INT16_MAX
618# define __UINT_LEAST16_MAX UINT16_MAX
619# define __INT_LEAST8_MIN    INT16_MIN
620# define __INT_LEAST8_MAX    INT16_MAX
621# define __UINT_LEAST8_MAX  UINT16_MAX
622#endif /* __INT16_TYPE__ */
623
624#ifdef __INT_LEAST16_MIN
625# define INT_LEAST16_MIN   __INT_LEAST16_MIN
626# define INT_LEAST16_MAX   __INT_LEAST16_MAX
627# define UINT_LEAST16_MAX __UINT_LEAST16_MAX
628# define INT_FAST16_MIN    __INT_LEAST16_MIN
629# define INT_FAST16_MAX    __INT_LEAST16_MAX
630# define UINT_FAST16_MAX  __UINT_LEAST16_MAX
631#endif /* __INT_LEAST16_MIN */
632
633
634#ifdef __INT8_TYPE__
635# define INT8_MAX            INT8_C(127)
636# define INT8_MIN          (-INT8_C(127)-1)
637# define UINT8_MAX          UINT8_C(255)
638# define __INT_LEAST8_MIN    INT8_MIN
639# define __INT_LEAST8_MAX    INT8_MAX
640# define __UINT_LEAST8_MAX  UINT8_MAX
641#endif /* __INT8_TYPE__ */
642
643#ifdef __INT_LEAST8_MIN
644# define INT_LEAST8_MIN   __INT_LEAST8_MIN
645# define INT_LEAST8_MAX   __INT_LEAST8_MAX
646# define UINT_LEAST8_MAX __UINT_LEAST8_MAX
647# define INT_FAST8_MIN    __INT_LEAST8_MIN
648# define INT_FAST8_MAX    __INT_LEAST8_MAX
649# define UINT_FAST8_MAX  __UINT_LEAST8_MAX
650#endif /* __INT_LEAST8_MIN */
651
652/* Some utility macros */
653#define  __INTN_MIN(n)  __stdint_join3( INT, n, _MIN)
654#define  __INTN_MAX(n)  __stdint_join3( INT, n, _MAX)
655#define __UINTN_MAX(n)  __stdint_join3(UINT, n, _MAX)
656#define  __INTN_C(n, v) __stdint_join3( INT, n, _C(v))
657#define __UINTN_C(n, v) __stdint_join3(UINT, n, _C(v))
658
659/* C99 7.18.2.4 Limits of integer types capable of holding object pointers. */
660/* C99 7.18.3 Limits of other integer types. */
661
662#define  INTPTR_MIN  __INTN_MIN(__INTPTR_WIDTH__)
663#define  INTPTR_MAX  __INTN_MAX(__INTPTR_WIDTH__)
664#define UINTPTR_MAX __UINTN_MAX(__INTPTR_WIDTH__)
665#define PTRDIFF_MIN  __INTN_MIN(__PTRDIFF_WIDTH__)
666#define PTRDIFF_MAX  __INTN_MAX(__PTRDIFF_WIDTH__)
667#define    SIZE_MAX __UINTN_MAX(__SIZE_WIDTH__)
668
669/* ISO9899:2011 7.20 (C11 Annex K): Define RSIZE_MAX if __STDC_WANT_LIB_EXT1__
670 * is enabled. */
671#if defined(__STDC_WANT_LIB_EXT1__) && __STDC_WANT_LIB_EXT1__ >= 1
672#define   RSIZE_MAX            (SIZE_MAX >> 1)
673#endif
674
675/* C99 7.18.2.5 Limits of greatest-width integer types. */
676#define INTMAX_MIN   __INTN_MIN(__INTMAX_WIDTH__)
677#define INTMAX_MAX   __INTN_MAX(__INTMAX_WIDTH__)
678#define UINTMAX_MAX __UINTN_MAX(__INTMAX_WIDTH__)
679
680/* C99 7.18.3 Limits of other integer types. */
681#define SIG_ATOMIC_MIN __INTN_MIN(__SIG_ATOMIC_WIDTH__)
682#define SIG_ATOMIC_MAX __INTN_MAX(__SIG_ATOMIC_WIDTH__)
683#ifdef __WINT_UNSIGNED__
684# define WINT_MIN       __UINTN_C(__WINT_WIDTH__, 0)
685# define WINT_MAX       __UINTN_MAX(__WINT_WIDTH__)
686#else
687# define WINT_MIN       __INTN_MIN(__WINT_WIDTH__)
688# define WINT_MAX       __INTN_MAX(__WINT_WIDTH__)
689#endif
690
691#ifndef WCHAR_MAX
692# define WCHAR_MAX __WCHAR_MAX__
693#endif
694#ifndef WCHAR_MIN
695# if __WCHAR_MAX__ == __INTN_MAX(__WCHAR_WIDTH__)
696#  define WCHAR_MIN __INTN_MIN(__WCHAR_WIDTH__)
697# else
698#  define WCHAR_MIN __UINTN_C(__WCHAR_WIDTH__, 0)
699# endif
700#endif
701
702/* 7.18.4.2 Macros for greatest-width integer constants. */
703#define INTMAX_C(v)   __INTN_C(__INTMAX_WIDTH__, v)
704#define UINTMAX_C(v) __UINTN_C(__INTMAX_WIDTH__, v)
705
706#endif /* __STDC_HOSTED__ */
707#endif /* __CLANG_STDINT_H */
708