1 | // -*- C++ -*- |
2 | //===--------------------------- limits.h ---------------------------------===// |
3 | // |
4 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
5 | // See https://llvm.org/LICENSE.txt for license information. |
6 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
7 | // |
8 | //===----------------------------------------------------------------------===// |
9 | |
10 | #ifndef _LIBCPP_LIMITS_H |
11 | #define _LIBCPP_LIMITS_H |
12 | |
13 | /* |
14 | limits.h synopsis |
15 | |
16 | Macros: |
17 | |
18 | CHAR_BIT |
19 | SCHAR_MIN |
20 | SCHAR_MAX |
21 | UCHAR_MAX |
22 | CHAR_MIN |
23 | CHAR_MAX |
24 | MB_LEN_MAX |
25 | SHRT_MIN |
26 | SHRT_MAX |
27 | USHRT_MAX |
28 | INT_MIN |
29 | INT_MAX |
30 | UINT_MAX |
31 | LONG_MIN |
32 | LONG_MAX |
33 | ULONG_MAX |
34 | LLONG_MIN // C99 |
35 | LLONG_MAX // C99 |
36 | ULLONG_MAX // C99 |
37 | |
38 | */ |
39 | |
40 | #include <__config> |
41 | |
42 | #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) |
43 | #pragma GCC system_header |
44 | #endif |
45 | |
46 | #ifndef __GNUC__ |
47 | #include_next <limits.h> |
48 | #else |
49 | // GCC header limits.h recursively includes itself through another header called |
50 | // syslimits.h for some reason. This setup breaks down if we directly |
51 | // #include_next GCC's limits.h (reasons not entirely clear to me). Therefore, |
52 | // we manually re-create the necessary include sequence below: |
53 | |
54 | // Get the system limits.h defines (force recurse into the next level) |
55 | #define _GCC_LIMITS_H_ |
56 | #define _GCC_NEXT_LIMITS_H |
57 | #include_next <limits.h> |
58 | |
59 | // Get the ISO C defines |
60 | #undef _GCC_LIMITS_H_ |
61 | #include_next <limits.h> |
62 | #endif // __GNUC__ |
63 | |
64 | #endif // _LIBCPP_LIMITS_H |
65 | |