172ce6294Slntue //===-- Definition of macros from limits.h --------------------------------===// 272ce6294Slntue // 372ce6294Slntue // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 472ce6294Slntue // See https://llvm.org/LICENSE.txt for license information. 572ce6294Slntue // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 672ce6294Slntue // 772ce6294Slntue //===----------------------------------------------------------------------===// 872ce6294Slntue 9330793c9SNick Desaulniers #ifndef LLVM_LIBC_MACROS_LIMITS_MACROS_H 10330793c9SNick Desaulniers #define LLVM_LIBC_MACROS_LIMITS_MACROS_H 1172ce6294Slntue 1272ce6294Slntue // Define all C23 macro constants of limits.h 1372ce6294Slntue 1472ce6294Slntue #ifndef CHAR_BIT 1572ce6294Slntue #ifdef __CHAR_BIT__ 1672ce6294Slntue #define CHAR_BIT __CHAR_BIT__ 1772ce6294Slntue #else 1872ce6294Slntue #define CHAR_BIT 8 1972ce6294Slntue #endif // __CHAR_BIT__ 2072ce6294Slntue #endif // CHAR_BIT 2172ce6294Slntue 22*b209eda6SJoseph Huber #ifndef MB_LEN_MAX 23*b209eda6SJoseph Huber // Represents a single UTF-32 wide character in the default locale. 24*b209eda6SJoseph Huber #define MB_LEN_MAX 4 25*b209eda6SJoseph Huber #endif // MB_LEN_MAX 2672ce6294Slntue 2772ce6294Slntue // *_WIDTH macros 2872ce6294Slntue 2972ce6294Slntue #ifndef CHAR_WIDTH 3072ce6294Slntue #define CHAR_WIDTH CHAR_BIT 3172ce6294Slntue #endif // CHAR_WIDTH 3272ce6294Slntue 3372ce6294Slntue #ifndef SCHAR_WIDTH 3472ce6294Slntue #define SCHAR_WIDTH CHAR_BIT 3572ce6294Slntue #endif // SCHAR_WIDTH 3672ce6294Slntue 3772ce6294Slntue #ifndef UCHAR_WIDTH 3872ce6294Slntue #define UCHAR_WIDTH CHAR_BIT 3972ce6294Slntue #endif // UCHAR_WIDTH 4072ce6294Slntue 4172ce6294Slntue #ifndef SHRT_WIDTH 4272ce6294Slntue #ifdef __SHRT_WIDTH__ 4372ce6294Slntue #define SHRT_WIDTH __SHRT_WIDTH__ 4472ce6294Slntue #else 4572ce6294Slntue #define SHRT_WIDTH 16 4672ce6294Slntue #endif // __SHRT_WIDTH__ 4772ce6294Slntue #endif // SHRT_WIDTH 4872ce6294Slntue 4972ce6294Slntue #ifndef USHRT_WIDTH 5072ce6294Slntue #define USHRT_WIDTH SHRT_WIDTH 5172ce6294Slntue #endif // USHRT_WIDTH 5272ce6294Slntue 5372ce6294Slntue #ifndef INT_WIDTH 5472ce6294Slntue #ifdef __INT_WIDTH__ 5572ce6294Slntue #define INT_WIDTH __INT_WIDTH__ 5672ce6294Slntue #else 5772ce6294Slntue #define INT_WIDTH 32 5872ce6294Slntue #endif // __INT_WIDTH__ 5972ce6294Slntue #endif // INT_WIDTH 6072ce6294Slntue 6172ce6294Slntue #ifndef UINT_WIDTH 6272ce6294Slntue #define UINT_WIDTH INT_WIDTH 6372ce6294Slntue #endif // UINT_WIDTH 6472ce6294Slntue 6572ce6294Slntue #ifndef LONG_WIDTH 6672ce6294Slntue #ifdef __LONG_WIDTH__ 6772ce6294Slntue #define LONG_WIDTH __LONG_WIDTH__ 6872ce6294Slntue #elif defined(__WORDSIZE) 6972ce6294Slntue #define LONG_WIDTH __WORDSIZE 7072ce6294Slntue #else 71e9355b1bSlntue // Use __SIZEOF_LONG__ * CHAR_BIT as backup. This is needed for clang-13 or 72e9355b1bSlntue // before. 73e9355b1bSlntue #define LONG_WIDTH (__SIZEOF_LONG__ * CHAR_BIT) 7472ce6294Slntue #endif // __LONG_WIDTH__ 7572ce6294Slntue #endif // LONG_WIDTH 7672ce6294Slntue 7772ce6294Slntue #ifndef ULONG_WIDTH 7872ce6294Slntue #define ULONG_WIDTH LONG_WIDTH 7972ce6294Slntue #endif // ULONG_WIDTH 8072ce6294Slntue 8172ce6294Slntue #ifndef LLONG_WIDTH 8272ce6294Slntue #ifdef __LLONG_WIDTH__ 8372ce6294Slntue #define LLONG_WIDTH __LLONG_WIDTH__ 8472ce6294Slntue #else 8572ce6294Slntue #define LLONG_WIDTH 64 8672ce6294Slntue #endif // __LLONG_WIDTH__ 8772ce6294Slntue #endif // LLONG_WIDTH 8872ce6294Slntue 8972ce6294Slntue #ifndef ULLONG_WIDTH 9072ce6294Slntue #define ULLONG_WIDTH LLONG_WIDTH 9172ce6294Slntue #endif // ULLONG_WIDTH 9272ce6294Slntue 9372ce6294Slntue #ifndef BOOL_WIDTH 9472ce6294Slntue #ifdef __BOOL_WIDTH__ 9572ce6294Slntue #define BOOL_WIDTH __BOOL_WIDTH__ 9672ce6294Slntue #else 9772ce6294Slntue #define BOOL_WIDTH 1 9872ce6294Slntue #endif // __BOOL_WIDTH__ 9972ce6294Slntue #endif // BOOL_WIDTH 10072ce6294Slntue 10172ce6294Slntue // *_MAX macros 10272ce6294Slntue 10372ce6294Slntue #ifndef SCHAR_MAX 10472ce6294Slntue #ifdef __SCHAR_MAX__ 10572ce6294Slntue #define SCHAR_MAX __SCHAR_MAX__ 10672ce6294Slntue #else 10772ce6294Slntue #define SCHAR_MAX 0x7f 10872ce6294Slntue #endif // __SCHAR_MAX__ 10972ce6294Slntue #endif // SCHAR_MAX 11072ce6294Slntue 11172ce6294Slntue #ifndef UCHAR_MAX 11272ce6294Slntue #define UCHAR_MAX (SCHAR_MAX * 2 + 1) 11372ce6294Slntue #endif // UCHAR_MAX 11472ce6294Slntue 11572ce6294Slntue // Check if char is unsigned. 11672ce6294Slntue #if !defined(__CHAR_UNSIGNED__) && ('\xff' > 0) 11772ce6294Slntue #define __CHAR_UNSIGNED__ 11872ce6294Slntue #endif 11972ce6294Slntue 12072ce6294Slntue #ifndef CHAR_MAX 12172ce6294Slntue #ifdef __CHAR_UNSIGNED__ 12272ce6294Slntue #define CHAR_MAX UCHAR_MAX 12372ce6294Slntue #else 12472ce6294Slntue #define CHAR_MAX SCHAR_MAX 12572ce6294Slntue #endif // __CHAR_UNSIGNED__ 12672ce6294Slntue #endif // CHAR_MAX 12772ce6294Slntue 12872ce6294Slntue #ifndef SHRT_MAX 12972ce6294Slntue #ifdef __SHRT_MAX__ 13072ce6294Slntue #define SHRT_MAX __SHRT_MAX__ 13172ce6294Slntue #else 13272ce6294Slntue #define SHRT_MAX 0x7fff 13372ce6294Slntue #endif // __SHRT_MAX__ 13472ce6294Slntue #endif // SHRT_MAX 13572ce6294Slntue 13672ce6294Slntue #ifndef USHRT_MAX 13772ce6294Slntue #define USHRT_MAX (SHRT_MAX * 2U + 1U) 13872ce6294Slntue #endif // USHRT_MAX 13972ce6294Slntue 14072ce6294Slntue #ifndef INT_MAX 14172ce6294Slntue #ifdef __INT_MAX__ 14272ce6294Slntue #define INT_MAX __INT_MAX__ 14372ce6294Slntue #else 14472ce6294Slntue #define INT_MAX (0 ^ (1 << (INT_WIDTH - 1))) 14572ce6294Slntue #endif // __INT_MAX__ 14672ce6294Slntue #endif // INT_MAX 14772ce6294Slntue 14872ce6294Slntue #ifndef UINT_MAX 149d6bbe2e2SJoseph Huber #define UINT_MAX (INT_MAX * 2U + 1U) 15072ce6294Slntue #endif // UINT_MAX 15172ce6294Slntue 15272ce6294Slntue #ifndef LONG_MAX 15372ce6294Slntue #ifdef __LONG_MAX__ 15472ce6294Slntue #define LONG_MAX __LONG_MAX__ 15572ce6294Slntue #else 15672ce6294Slntue #define LONG_MAX (0L ^ (1L << (LONG_WIDTH - 1))) 15772ce6294Slntue #endif // __LONG_MAX__ 15872ce6294Slntue #endif // LONG_MAX 15972ce6294Slntue 16072ce6294Slntue #ifndef ULONG_MAX 161d6bbe2e2SJoseph Huber #define ULONG_MAX (LONG_MAX * 2UL + 1UL) 16272ce6294Slntue #endif // ULONG_MAX 16372ce6294Slntue 16472ce6294Slntue #ifndef LLONG_MAX 16572ce6294Slntue #ifdef __LONG_LONG_MAX__ 16672ce6294Slntue #define LLONG_MAX __LONG_LONG_MAX__ 16772ce6294Slntue #else 16872ce6294Slntue #define LLONG_MAX (0LL ^ (1LL << (LLONG_WIDTH - 1))) 16972ce6294Slntue #endif // __LONG_LONG_MAX__ 17072ce6294Slntue #endif // LLONG_MAX 17172ce6294Slntue 17272ce6294Slntue #ifndef ULLONG_MAX 173d6bbe2e2SJoseph Huber #define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL) 17472ce6294Slntue #endif // ULLONG_MAX 17572ce6294Slntue 17672ce6294Slntue // *_MIN macros 17772ce6294Slntue 17872ce6294Slntue #ifndef SCHAR_MIN 17972ce6294Slntue #define SCHAR_MIN (-SCHAR_MAX - 1) 18072ce6294Slntue #endif // SCHAR_MIN 18172ce6294Slntue 18272ce6294Slntue #ifndef UCHAR_MIN 18372ce6294Slntue #define UCHAR_MIN 0 18472ce6294Slntue #endif // UCHAR_MIN 18572ce6294Slntue 18672ce6294Slntue #ifndef CHAR_MIN 18772ce6294Slntue #ifdef __CHAR_UNSIGNED__ 18872ce6294Slntue #define CHAR_MIN UCHAR_MIN 18972ce6294Slntue #else 19072ce6294Slntue #define CHAR_MIN SCHAR_MIN 19172ce6294Slntue #endif // __CHAR_UNSIGNED__ 19272ce6294Slntue #endif // CHAR_MIN 19372ce6294Slntue 19472ce6294Slntue #ifndef SHRT_MIN 19572ce6294Slntue #define SHRT_MIN (-SHRT_MAX - 1) 19672ce6294Slntue #endif // SHRT_MIN 19772ce6294Slntue 19872ce6294Slntue #ifndef USHRT_MIN 19972ce6294Slntue #define USHRT_MIN 0U 20072ce6294Slntue #endif // USHRT_MIN 20172ce6294Slntue 20272ce6294Slntue #ifndef INT_MIN 20372ce6294Slntue #define INT_MIN (-INT_MAX - 1) 20472ce6294Slntue #endif // INT_MIN 20572ce6294Slntue 20672ce6294Slntue #ifndef UINT_MIN 20772ce6294Slntue #define UINT_MIN 0U 20872ce6294Slntue #endif // UINT_MIN 20972ce6294Slntue 21072ce6294Slntue #ifndef LONG_MIN 21172ce6294Slntue #define LONG_MIN (-LONG_MAX - 1L) 21272ce6294Slntue #endif // LONG_MIN 21372ce6294Slntue 21472ce6294Slntue #ifndef ULONG_MIN 21572ce6294Slntue #define ULONG_MIN 0UL 21672ce6294Slntue #endif // ULONG_MIN 21772ce6294Slntue 21872ce6294Slntue #ifndef LLONG_MIN 21972ce6294Slntue #define LLONG_MIN (-LLONG_MAX - 1LL) 22072ce6294Slntue #endif // LLONG_MIN 22172ce6294Slntue 22272ce6294Slntue #ifndef ULLONG_MIN 22372ce6294Slntue #define ULLONG_MIN 0ULL 22472ce6294Slntue #endif // ULLONG_MIN 22572ce6294Slntue 2267f3c40a6SNhat Nguyen #ifndef _POSIX_MAX_CANON 2277f3c40a6SNhat Nguyen #define _POSIX_MAX_CANON 255 2287f3c40a6SNhat Nguyen #endif 2297f3c40a6SNhat Nguyen 2307f3c40a6SNhat Nguyen #ifndef _POSIX_MAX_INPUT 2317f3c40a6SNhat Nguyen #define _POSIX_MAX_INPUT 255 2327f3c40a6SNhat Nguyen #endif 2337f3c40a6SNhat Nguyen 2347f3c40a6SNhat Nguyen #ifndef _POSIX_NAME_MAX 2357f3c40a6SNhat Nguyen #define _POSIX_PATH_MAX 256 2367f3c40a6SNhat Nguyen #endif 2377f3c40a6SNhat Nguyen 238330793c9SNick Desaulniers #endif // LLVM_LIBC_MACROS_LIMITS_MACROS_H 239