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