1*344a7f5eSAndroid Build Coastguard Worker /*===---- limits.h - Standard header for integer sizes --------------------===*\ 2*344a7f5eSAndroid Build Coastguard Worker * 3*344a7f5eSAndroid Build Coastguard Worker * Copyright (c) 2009 Chris Lattner 4*344a7f5eSAndroid Build Coastguard Worker * 5*344a7f5eSAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a copy 6*344a7f5eSAndroid Build Coastguard Worker * of this software and associated documentation files (the "Software"), to deal 7*344a7f5eSAndroid Build Coastguard Worker * in the Software without restriction, including without limitation the rights 8*344a7f5eSAndroid Build Coastguard Worker * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9*344a7f5eSAndroid Build Coastguard Worker * copies of the Software, and to permit persons to whom the Software is 10*344a7f5eSAndroid Build Coastguard Worker * furnished to do so, subject to the following conditions: 11*344a7f5eSAndroid Build Coastguard Worker * 12*344a7f5eSAndroid Build Coastguard Worker * The above copyright notice and this permission notice shall be included in 13*344a7f5eSAndroid Build Coastguard Worker * all copies or substantial portions of the Software. 14*344a7f5eSAndroid Build Coastguard Worker * 15*344a7f5eSAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16*344a7f5eSAndroid Build Coastguard Worker * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17*344a7f5eSAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18*344a7f5eSAndroid Build Coastguard Worker * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19*344a7f5eSAndroid Build Coastguard Worker * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20*344a7f5eSAndroid Build Coastguard Worker * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21*344a7f5eSAndroid Build Coastguard Worker * THE SOFTWARE. 22*344a7f5eSAndroid Build Coastguard Worker * 23*344a7f5eSAndroid Build Coastguard Worker \*===----------------------------------------------------------------------===*/ 24*344a7f5eSAndroid Build Coastguard Worker 25*344a7f5eSAndroid Build Coastguard Worker #ifndef __CLANG_LIMITS_H 26*344a7f5eSAndroid Build Coastguard Worker #define __CLANG_LIMITS_H 27*344a7f5eSAndroid Build Coastguard Worker 28*344a7f5eSAndroid Build Coastguard Worker /* The system's limits.h may, in turn, try to #include_next GCC's limits.h. 29*344a7f5eSAndroid Build Coastguard Worker Avert this #include_next madness. */ 30*344a7f5eSAndroid Build Coastguard Worker #if defined __GNUC__ && !defined _GCC_LIMITS_H_ 31*344a7f5eSAndroid Build Coastguard Worker #define _GCC_LIMITS_H_ 32*344a7f5eSAndroid Build Coastguard Worker #endif 33*344a7f5eSAndroid Build Coastguard Worker 34*344a7f5eSAndroid Build Coastguard Worker /* System headers include a number of constants from POSIX in <limits.h>. 35*344a7f5eSAndroid Build Coastguard Worker Include it if we're hosted. */ 36*344a7f5eSAndroid Build Coastguard Worker #if __STDC_HOSTED__ && __has_include_next(<limits.h>) 37*344a7f5eSAndroid Build Coastguard Worker #include_next <limits.h> 38*344a7f5eSAndroid Build Coastguard Worker #endif 39*344a7f5eSAndroid Build Coastguard Worker 40*344a7f5eSAndroid Build Coastguard Worker /* Many system headers try to "help us out" by defining these. No really, we 41*344a7f5eSAndroid Build Coastguard Worker know how big each datatype is. */ 42*344a7f5eSAndroid Build Coastguard Worker #undef SCHAR_MIN 43*344a7f5eSAndroid Build Coastguard Worker #undef SCHAR_MAX 44*344a7f5eSAndroid Build Coastguard Worker #undef UCHAR_MAX 45*344a7f5eSAndroid Build Coastguard Worker #undef SHRT_MIN 46*344a7f5eSAndroid Build Coastguard Worker #undef SHRT_MAX 47*344a7f5eSAndroid Build Coastguard Worker #undef USHRT_MAX 48*344a7f5eSAndroid Build Coastguard Worker #undef INT_MIN 49*344a7f5eSAndroid Build Coastguard Worker #undef INT_MAX 50*344a7f5eSAndroid Build Coastguard Worker #undef UINT_MAX 51*344a7f5eSAndroid Build Coastguard Worker #undef LONG_MIN 52*344a7f5eSAndroid Build Coastguard Worker #undef LONG_MAX 53*344a7f5eSAndroid Build Coastguard Worker #undef ULONG_MAX 54*344a7f5eSAndroid Build Coastguard Worker 55*344a7f5eSAndroid Build Coastguard Worker #undef CHAR_BIT 56*344a7f5eSAndroid Build Coastguard Worker #undef CHAR_MIN 57*344a7f5eSAndroid Build Coastguard Worker #undef CHAR_MAX 58*344a7f5eSAndroid Build Coastguard Worker 59*344a7f5eSAndroid Build Coastguard Worker /* C90/99 5.2.4.2.1 */ 60*344a7f5eSAndroid Build Coastguard Worker #define SCHAR_MAX __SCHAR_MAX__ 61*344a7f5eSAndroid Build Coastguard Worker #define SHRT_MAX __SHRT_MAX__ 62*344a7f5eSAndroid Build Coastguard Worker #define INT_MAX __INT_MAX__ 63*344a7f5eSAndroid Build Coastguard Worker #define LONG_MAX __LONG_MAX__ 64*344a7f5eSAndroid Build Coastguard Worker 65*344a7f5eSAndroid Build Coastguard Worker #define SCHAR_MIN (-__SCHAR_MAX__-1) 66*344a7f5eSAndroid Build Coastguard Worker #define SHRT_MIN (-__SHRT_MAX__ -1) 67*344a7f5eSAndroid Build Coastguard Worker #define INT_MIN (-__INT_MAX__ -1) 68*344a7f5eSAndroid Build Coastguard Worker #define LONG_MIN (-__LONG_MAX__ -1L) 69*344a7f5eSAndroid Build Coastguard Worker 70*344a7f5eSAndroid Build Coastguard Worker #define UCHAR_MAX (__SCHAR_MAX__*2 +1) 71*344a7f5eSAndroid Build Coastguard Worker #define USHRT_MAX (__SHRT_MAX__ *2 +1) 72*344a7f5eSAndroid Build Coastguard Worker #define UINT_MAX (__INT_MAX__ *2U +1U) 73*344a7f5eSAndroid Build Coastguard Worker #define ULONG_MAX (__LONG_MAX__ *2UL+1UL) 74*344a7f5eSAndroid Build Coastguard Worker 75*344a7f5eSAndroid Build Coastguard Worker #ifndef MB_LEN_MAX 76*344a7f5eSAndroid Build Coastguard Worker #define MB_LEN_MAX 1 77*344a7f5eSAndroid Build Coastguard Worker #endif 78*344a7f5eSAndroid Build Coastguard Worker 79*344a7f5eSAndroid Build Coastguard Worker #define CHAR_BIT __CHAR_BIT__ 80*344a7f5eSAndroid Build Coastguard Worker 81*344a7f5eSAndroid Build Coastguard Worker #ifdef __CHAR_UNSIGNED__ /* -funsigned-char */ 82*344a7f5eSAndroid Build Coastguard Worker #define CHAR_MIN 0 83*344a7f5eSAndroid Build Coastguard Worker #define CHAR_MAX UCHAR_MAX 84*344a7f5eSAndroid Build Coastguard Worker #else 85*344a7f5eSAndroid Build Coastguard Worker #define CHAR_MIN SCHAR_MIN 86*344a7f5eSAndroid Build Coastguard Worker #define CHAR_MAX __SCHAR_MAX__ 87*344a7f5eSAndroid Build Coastguard Worker #endif 88*344a7f5eSAndroid Build Coastguard Worker 89*344a7f5eSAndroid Build Coastguard Worker /* C99 5.2.4.2.1: Added long long. 90*344a7f5eSAndroid Build Coastguard Worker C++11 18.3.3.2: same contents as the Standard C Library header <limits.h>. 91*344a7f5eSAndroid Build Coastguard Worker */ 92*344a7f5eSAndroid Build Coastguard Worker #if __STDC_VERSION__ >= 199901L || __cplusplus >= 201103L 93*344a7f5eSAndroid Build Coastguard Worker 94*344a7f5eSAndroid Build Coastguard Worker #undef LLONG_MIN 95*344a7f5eSAndroid Build Coastguard Worker #undef LLONG_MAX 96*344a7f5eSAndroid Build Coastguard Worker #undef ULLONG_MAX 97*344a7f5eSAndroid Build Coastguard Worker 98*344a7f5eSAndroid Build Coastguard Worker #define LLONG_MAX __LONG_LONG_MAX__ 99*344a7f5eSAndroid Build Coastguard Worker #define LLONG_MIN (-__LONG_LONG_MAX__-1LL) 100*344a7f5eSAndroid Build Coastguard Worker #define ULLONG_MAX (__LONG_LONG_MAX__*2ULL+1ULL) 101*344a7f5eSAndroid Build Coastguard Worker #endif 102*344a7f5eSAndroid Build Coastguard Worker 103*344a7f5eSAndroid Build Coastguard Worker /* LONG_LONG_MIN/LONG_LONG_MAX/ULONG_LONG_MAX are a GNU extension. It's too bad 104*344a7f5eSAndroid Build Coastguard Worker that we don't have something like #pragma poison that could be used to 105*344a7f5eSAndroid Build Coastguard Worker deprecate a macro - the code should just use LLONG_MAX and friends. 106*344a7f5eSAndroid Build Coastguard Worker */ 107*344a7f5eSAndroid Build Coastguard Worker #if defined(__GNU_LIBRARY__) ? defined(__USE_GNU) : !defined(__STRICT_ANSI__) 108*344a7f5eSAndroid Build Coastguard Worker 109*344a7f5eSAndroid Build Coastguard Worker #undef LONG_LONG_MIN 110*344a7f5eSAndroid Build Coastguard Worker #undef LONG_LONG_MAX 111*344a7f5eSAndroid Build Coastguard Worker #undef ULONG_LONG_MAX 112*344a7f5eSAndroid Build Coastguard Worker 113*344a7f5eSAndroid Build Coastguard Worker #define LONG_LONG_MAX __LONG_LONG_MAX__ 114*344a7f5eSAndroid Build Coastguard Worker #define LONG_LONG_MIN (-__LONG_LONG_MAX__-1LL) 115*344a7f5eSAndroid Build Coastguard Worker #define ULONG_LONG_MAX (__LONG_LONG_MAX__*2ULL+1ULL) 116*344a7f5eSAndroid Build Coastguard Worker #endif 117*344a7f5eSAndroid Build Coastguard Worker 118*344a7f5eSAndroid Build Coastguard Worker #endif /* __CLANG_LIMITS_H */ 119