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