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
16Macros:
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