stdint.h revision 06dcf6b09257ac2382a969fc8c7b954adbc4a344
12a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner/*===---- stdint.h - Standard header for sized integer types --------------===*\
22a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner *
32a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner * Copyright (c) 2009 Chris Lattner
42a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner *
52a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner * Permission is hereby granted, free of charge, to any person obtaining a copy
62a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner * of this software and associated documentation files (the "Software"), to deal
72a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner * in the Software without restriction, including without limitation the rights
82a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
92a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner * copies of the Software, and to permit persons to whom the Software is
102a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner * furnished to do so, subject to the following conditions:
112a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner *
122a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner * The above copyright notice and this permission notice shall be included in
132a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner * all copies or substantial portions of the Software.
142a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner *
152a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
162a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
172a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
182a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
192a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
202a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
212a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner * THE SOFTWARE.
222a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner *
232a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner\*===----------------------------------------------------------------------===*/
242a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner
256fdca0e1f8352a102f4f0cea0dc29c2209182b15Eli Friedman#ifndef __CLANG_STDINT_H
266fdca0e1f8352a102f4f0cea0dc29c2209182b15Eli Friedman#define __CLANG_STDINT_H
276fdca0e1f8352a102f4f0cea0dc29c2209182b15Eli Friedman
286fdca0e1f8352a102f4f0cea0dc29c2209182b15Eli Friedman/* If we're hosted, fall back to the system's stdint.h, which might have
296fdca0e1f8352a102f4f0cea0dc29c2209182b15Eli Friedman * additional definitions.
306fdca0e1f8352a102f4f0cea0dc29c2209182b15Eli Friedman */
3192bd8c70a6837b647a6c55964f8d0a50bf561dbcJohn Thompson#if __STDC_HOSTED__ && \
3292bd8c70a6837b647a6c55964f8d0a50bf561dbcJohn Thompson    defined(__has_include_next) && __has_include_next(<stdint.h>)
336fdca0e1f8352a102f4f0cea0dc29c2209182b15Eli Friedman# include_next <stdint.h>
346fdca0e1f8352a102f4f0cea0dc29c2209182b15Eli Friedman#else
352a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner
362a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner/* We currently only support targets with power of two, 2s complement integers.
372a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner */
382a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner
392a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner/* C99 7.18.1.1 Exact-width integer types.
402a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner * C99 7.18.1.2 Minimum-width integer types.
412a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner * C99 7.18.1.3 Fastest minimum-width integer types.
422a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner * Since we only support pow-2 targets, these map directly to exact width types.
432a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner */
442a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner
4506dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner/* Some 16-bit targets do not have a 64-bit datatype.  Only define the 64-bit
4606dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner * typedefs if there is something to typedef them to.
4706dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner */
48ca93195baf1076ee6232a722f5ea5e580fc67a4fChris Lattner#ifdef __INT64_TYPE__
4906dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#ifndef __int8_t_defined  /* glibc does weird things with sys/types.h */
50ca93195baf1076ee6232a722f5ea5e580fc67a4fChris Lattnertypedef __INT64_TYPE__ int64_t;
51ca93195baf1076ee6232a722f5ea5e580fc67a4fChris Lattner#endif
5206dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattnertypedef unsigned __INT64_TYPE__ uint64_t;
5306dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattnertypedef int64_t   int_least64_t;
5406dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattnertypedef uint64_t uint_least64_t;
5506dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattnertypedef int64_t   int_fast64_t;
5606dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattnertypedef uint64_t uint_fast64_t;
57ca93195baf1076ee6232a722f5ea5e580fc67a4fChris Lattner#endif
58ca93195baf1076ee6232a722f5ea5e580fc67a4fChris Lattner
5906dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#ifndef __int8_t_defined  /* glibc does weird things with sys/types.h */
6006dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattnertypedef __INT32_TYPE__ int32_t;
6106dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#endif
62ca93195baf1076ee6232a722f5ea5e580fc67a4fChris Lattner#ifndef __uint32_t_defined  /* more glibc compatibility */
63ca93195baf1076ee6232a722f5ea5e580fc67a4fChris Lattner#define __uint32_t_defined
642a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattnertypedef unsigned __INT32_TYPE__ uint32_t;
65ca93195baf1076ee6232a722f5ea5e580fc67a4fChris Lattner#endif
662a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattnertypedef int32_t   int_least32_t;
672a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattnertypedef uint32_t uint_least32_t;
682a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattnertypedef int32_t   int_fast32_t;
692a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattnertypedef uint32_t uint_fast32_t;
702a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner
7106dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner
7206dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#ifndef __int8_t_defined  /* glibc does weird things with sys/types.h */
7306dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattnertypedef __INT16_TYPE__ int16_t;
742a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#endif
7506dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattnertypedef unsigned __INT16_TYPE__ uint16_t;
7606dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattnertypedef int16_t   int_least16_t;
7706dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattnertypedef uint16_t uint_least16_t;
7806dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattnertypedef int16_t   int_fast16_t;
7906dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattnertypedef uint16_t uint_fast16_t;
802a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner
812a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner
8206dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#ifndef __int8_t_defined  /* glibc does weird things with sys/types.h */
8306dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattnertypedef signed __INT8_TYPE__ int8_t;
8406dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#endif
8506dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattnertypedef unsigned __INT8_TYPE__ uint8_t;
8606dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattnertypedef int8_t     int_least8_t;
8706dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattnertypedef uint8_t   uint_least8_t;
8806dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattnertypedef int8_t     int_fast8_t;
8906dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattnertypedef uint8_t   uint_fast8_t;
9006dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner
9106dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner/* prevent glibc sys/types.h from defining conflicting types */
9206dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#ifndef __int8_t_defined
9306dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner# define __int8_t_defined
9406dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#endif /* __int8_t_defined */
9506dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner
962a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner/* C99 7.18.1.4 Integer types capable of holding object pointers.
972a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner */
9840e60c27d09d0561cd3ab41c332e3b0838e899ddChris Lattner#ifndef __intptr_t_defined
996ad474f82f0cf32e13128d89fa5ad3a37ae73530Chris Lattnertypedef __INTPTR_TYPE__          intptr_t;
10040e60c27d09d0561cd3ab41c332e3b0838e899ddChris Lattner#define __intptr_t_defined
10140e60c27d09d0561cd3ab41c332e3b0838e899ddChris Lattner#endif
102cf117d367ee75d44dfeaf588e00ad0bfbad64ef7Daniel Dunbartypedef unsigned __INTPTR_TYPE__ uintptr_t;
1032a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner
1042a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner/* C99 7.18.1.5 Greatest-width integer types.
1052a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner */
1062a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattnertypedef __INTMAX_TYPE__   intmax_t;
1072a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattnertypedef __UINTMAX_TYPE__ uintmax_t;
1082a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner
10906dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner/* C99 7.18.4 Macros for minimum-width integer constants.
11006dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner *
11106dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner * Note that C++ should not check __STDC_CONSTANT_MACROS here, contrary to the
11206dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner * claims of the C standard (see C++ 18.3.1p2, [cstdint.syn]).
11306dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner */
11406dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner
11506dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner/* Only define the 64-bit size macros if we have 64-bit support. */
11606dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#ifdef __INT64_TYPE__
11706dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#define INT64_C(v)  (v##LL)
11806dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#define UINT64_C(v) (v##ULL)
11906dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#endif
12006dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner
12106dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#define INT32_C(v)  (v)
12206dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#define UINT32_C(v) (v##U)
12306dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#define INT16_C(v)  (v)
12406dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#define UINT16_C(v) (v##U)
12506dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#define INT8_C(v)   (v)
12606dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#define UINT8_C(v)  (v##U)
12706dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner
1282a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner/* C99 7.18.2.1 Limits of exact-width integer types.
1292a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner * Fixed sized values have fixed size max/min.
1302a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner * C99 7.18.2.2 Limits of minimum-width integer types.
1312a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner * Since we map these directly onto fixed-sized types, these values the same.
1322a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner * C99 7.18.2.3 Limits of fastest minimum-width integer types.
133614842802476068c08bced367fa97de4963fd6afChris Lattner *
134614842802476068c08bced367fa97de4963fd6afChris Lattner * Note that C++ should not check __STDC_LIMIT_MACROS here, contrary to the
135614842802476068c08bced367fa97de4963fd6afChris Lattner * claims of the C standard (see C++ 18.3.1p2, [cstdint.syn]).
1362a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner */
1372a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner
1382a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner/* If we do not have 64-bit support, don't define the 64-bit size macros. */
139ab775f62eab83f06ed972e573599031719ae2a9fChris Lattner#ifdef __INT64_TYPE__
140f894bd03546b2f9aa70c5a7a50a90d333c4753dcChris Lattner#define INT64_MAX      9223372036854775807LL
141f894bd03546b2f9aa70c5a7a50a90d333c4753dcChris Lattner#define INT64_MIN    (-9223372036854775807LL-1)
1427ed4f39518e7ae1069d820d2b8bd462d6ee3fd9aChris Lattner#define UINT64_MAX    18446744073709551615ULL
1432a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#define INT_LEAST64_MIN  INT64_MIN
1442a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#define INT_LEAST64_MAX  INT64_MAX
1452a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#define UINT_LEAST64_MAX UINT64_MAX
1462a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#define INT_FAST64_MIN    INT64_MIN
1472a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#define INT_FAST64_MAX    INT64_MAX
1482a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#define UINT_FAST64_MAX  UINT64_MAX
1492a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#endif
1502a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner
15106dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#define INT32_MAX         2147483647
15206dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#define INT32_MIN        (-2147483647-1)
15306dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#define UINT32_MAX        4294967295U
15406dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#define INT_LEAST32_MIN  INT32_MIN
15506dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#define INT_LEAST32_MAX  INT32_MAX
15606dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#define UINT_LEAST32_MAX UINT32_MAX
15706dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#define INT_FAST32_MIN   INT32_MIN
15806dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#define INT_FAST32_MAX   INT32_MAX
15906dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#define UINT_FAST32_MAX  UINT32_MAX
16006dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner
16106dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#define INT16_MAX    32767
16206dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#define INT16_MIN  (-32768)
16306dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#define UINT16_MAX   65535
16406dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#define INT_LEAST16_MIN   INT16_MIN
16506dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#define INT_LEAST16_MAX   INT16_MAX
16606dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#define UINT_LEAST16_MAX UINT16_MAX
16706dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#define INT_FAST16_MIN    INT16_MIN
16806dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#define INT_FAST16_MAX    INT16_MAX
16906dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#define UINT_FAST16_MAX  UINT16_MAX
17006dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner
17106dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#define INT8_MAX    127
17206dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#define INT8_MIN  (-128)
17306dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#define UINT8_MAX   255
17406dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#define INT_LEAST8_MIN   INT8_MIN
17506dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#define INT_LEAST8_MAX   INT8_MAX
17606dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#define UINT_LEAST8_MAX UINT8_MAX
17706dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#define INT_FAST8_MIN    INT8_MIN
17806dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#define INT_FAST8_MAX    INT8_MAX
17906dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner#define UINT_FAST8_MAX  UINT8_MAX
18006dcf6b09257ac2382a969fc8c7b954adbc4a344Chris Lattner
1812a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner/* C99 7.18.2.4 Limits of integer types capable of holding object pointers. */
1822a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner/* C99 7.18.3 Limits of other integer types. */
1832a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner
1842a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#if __POINTER_WIDTH__ == 64
1852a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner
1862a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#define  INTPTR_MIN  INT64_MIN
1872a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#define  INTPTR_MAX  INT64_MAX
1882a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#define UINTPTR_MAX UINT64_MAX
1892a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#define PTRDIFF_MIN  INT64_MIN
1902a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#define PTRDIFF_MAX  INT64_MAX
1912a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#define SIZE_MAX    UINT64_MAX
1922a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner
19363b4fe6c118c14707d297f6f879e5e7973b8e6ffSebastian Redl#elif __POINTER_WIDTH__ == 32
1942a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner
1952a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#define  INTPTR_MIN  INT32_MIN
1962a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#define  INTPTR_MAX  INT32_MAX
1972a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#define UINTPTR_MAX UINT32_MAX
1982a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#define PTRDIFF_MIN  INT32_MIN
1992a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#define PTRDIFF_MAX  INT32_MAX
2002a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#define SIZE_MAX    UINT32_MAX
2012a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner
20263b4fe6c118c14707d297f6f879e5e7973b8e6ffSebastian Redl#elif __POINTER_WIDTH__ == 16
2032a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner
2042a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#define  INTPTR_MIN  INT16_MIN
2052a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#define  INTPTR_MAX  INT16_MAX
2062a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#define UINTPTR_MAX UINT16_MAX
2072a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#define PTRDIFF_MIN  INT16_MIN
2082a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#define PTRDIFF_MAX  INT16_MAX
2092a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#define SIZE_MAX    UINT16_MAX
2102a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner
2112a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#else
2122a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#error "unknown or unset pointer width!"
2132a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#endif
2142a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner
2152a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner/* C99 7.18.2.5 Limits of greatest-width integer types. */
2162a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#define INTMAX_MIN  (-__INTMAX_MAX__-1)
2172a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#define INTMAX_MAX   __INTMAX_MAX__
218c865f7ae8be99de29c9f2ab68573c11e90b636d1Chris Lattner#define UINTMAX_MAX (__INTMAX_MAX__*2ULL+1ULL)
2192a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner
2202a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner/* C99 7.18.3 Limits of other integer types. */
2212a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#define SIG_ATOMIC_MIN INT32_MIN
2222a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#define SIG_ATOMIC_MAX INT32_MAX
2232a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#define WINT_MIN       INT32_MIN
2242a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#define WINT_MAX       INT32_MAX
2252a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner
2262a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner/* FIXME: if we ever support a target with unsigned wchar_t, this should be
2272a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner * 0 .. Max.
2282a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner */
2292a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#ifndef WCHAR_MAX
2302a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#define WCHAR_MAX __WCHAR_MAX__
2312a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#endif
2322a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#ifndef WCHAR_MIN
2332a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#define WCHAR_MIN (-__WCHAR_MAX__-1)
2342a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner#endif
2352a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner
2362a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner/* 7.18.4.2 Macros for greatest-width integer constants. */
2377ed4f39518e7ae1069d820d2b8bd462d6ee3fd9aChris Lattner#define INTMAX_C(v)  (v##LL)
2387ed4f39518e7ae1069d820d2b8bd462d6ee3fd9aChris Lattner#define UINTMAX_C(v) (v##ULL)
2392a67f7bd99d004f78a961a16b6525f61313dd974Chris Lattner
2406fdca0e1f8352a102f4f0cea0dc29c2209182b15Eli Friedman#endif /* __STDC_HOSTED__ */
2416fdca0e1f8352a102f4f0cea0dc29c2209182b15Eli Friedman#endif /* __CLANG_STDINT_H */
242