brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.7 KiB · d08227f Raw
134 lines · c
1/*===---- limits.h - Standard header for integer sizes --------------------===*\2 *3 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4 * See https://llvm.org/LICENSE.txt for license information.5 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6 *7\*===----------------------------------------------------------------------===*/8 9#ifndef __CLANG_LIMITS_H10#define __CLANG_LIMITS_H11 12#if defined(__MVS__) && __has_include_next(<limits.h>)13#include_next <limits.h>14#else15 16/* The system's limits.h may, in turn, try to #include_next GCC's limits.h.17   Avert this #include_next madness. */18#if defined __GNUC__ && !defined _GCC_LIMITS_H_19#define _GCC_LIMITS_H_20#endif21 22/* System headers include a number of constants from POSIX in <limits.h>.23   Include it if we're hosted. */24#if __STDC_HOSTED__ && __has_include_next(<limits.h>)25#include_next <limits.h>26#endif27 28/* Many system headers try to "help us out" by defining these.  No really, we29   know how big each datatype is. */30#undef  SCHAR_MIN31#undef  SCHAR_MAX32#undef  UCHAR_MAX33#undef  SHRT_MIN34#undef  SHRT_MAX35#undef  USHRT_MAX36#undef  INT_MIN37#undef  INT_MAX38#undef  UINT_MAX39#undef  LONG_MIN40#undef  LONG_MAX41#undef  ULONG_MAX42 43#undef  CHAR_BIT44#undef  CHAR_MIN45#undef  CHAR_MAX46 47/* C90/99 5.2.4.2.1 */48#define SCHAR_MAX __SCHAR_MAX__49#define SHRT_MAX  __SHRT_MAX__50#define INT_MAX   __INT_MAX__51#define LONG_MAX  __LONG_MAX__52 53#define SCHAR_MIN (-__SCHAR_MAX__-1)54#define SHRT_MIN  (-__SHRT_MAX__ -1)55#define INT_MIN   (-__INT_MAX__  -1)56#define LONG_MIN  (-__LONG_MAX__ -1L)57 58#define UCHAR_MAX (__SCHAR_MAX__*2  +1)59#if __SHRT_WIDTH__ < __INT_WIDTH__60#define USHRT_MAX (__SHRT_MAX__ * 2 + 1)61#else62#define USHRT_MAX (__SHRT_MAX__ * 2U + 1U)63#endif64#define UINT_MAX  (__INT_MAX__  *2U +1U)65#define ULONG_MAX (__LONG_MAX__ *2UL+1UL)66 67#ifndef MB_LEN_MAX68#define MB_LEN_MAX 169#endif70 71#define CHAR_BIT  __CHAR_BIT__72 73/* C23 5.2.4.2.1 */74#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L75#define BOOL_WIDTH   __BOOL_WIDTH__76#define CHAR_WIDTH   CHAR_BIT77#define SCHAR_WIDTH  CHAR_BIT78#define UCHAR_WIDTH  CHAR_BIT79#define USHRT_WIDTH  __SHRT_WIDTH__80#define SHRT_WIDTH   __SHRT_WIDTH__81#define UINT_WIDTH   __INT_WIDTH__82#define INT_WIDTH    __INT_WIDTH__83#define ULONG_WIDTH  __LONG_WIDTH__84#define LONG_WIDTH   __LONG_WIDTH__85#define ULLONG_WIDTH __LLONG_WIDTH__86#define LLONG_WIDTH  __LLONG_WIDTH__87 88#define BITINT_MAXWIDTH __BITINT_MAXWIDTH__89#endif90 91#ifdef __CHAR_UNSIGNED__  /* -funsigned-char */92#define CHAR_MIN 093#define CHAR_MAX UCHAR_MAX94#else95#define CHAR_MIN SCHAR_MIN96#define CHAR_MAX __SCHAR_MAX__97#endif98 99/* C99 5.2.4.2.1: Added long long.100   C++11 18.3.3.2: same contents as the Standard C Library header <limits.h>.101 */102#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) ||              \103    (defined(__cplusplus) && __cplusplus >= 201103L)104 105#undef  LLONG_MIN106#undef  LLONG_MAX107#undef  ULLONG_MAX108 109#define LLONG_MAX  __LONG_LONG_MAX__110#define LLONG_MIN  (-__LONG_LONG_MAX__-1LL)111#define ULLONG_MAX (__LONG_LONG_MAX__*2ULL+1ULL)112#endif113 114/* LONG_LONG_MIN/LONG_LONG_MAX/ULONG_LONG_MAX are a GNU extension. Android's115   bionic also defines them. It's too bad that we don't have something like116   #pragma poison that could be used to deprecate a macro - the code should just117   use LLONG_MAX and friends.118 */119#if (defined(__GNU_LIBRARY__) ? defined(__USE_GNU)                             \120                              : !defined(__STRICT_ANSI__)) ||                  \121    defined(__BIONIC__)122 123#undef   LONG_LONG_MIN124#undef   LONG_LONG_MAX125#undef   ULONG_LONG_MAX126 127#define LONG_LONG_MAX  __LONG_LONG_MAX__128#define LONG_LONG_MIN  (-__LONG_LONG_MAX__-1LL)129#define ULONG_LONG_MAX (__LONG_LONG_MAX__*2ULL+1ULL)130#endif131 132#endif /* __MVS__ */133#endif /* __CLANG_LIMITS_H */134