mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-28 14:36:08 +00:00

Declare __STDC_FORMAT_MACROS, __STDC_LIMIT_MACROS and __STDC_CONSTANT_MACROS before including real inttypes.h/stdint.h when the wrapper-header is included in C++11, in order to enable the necessary macros in C99-compliant libc. The C99 standard defined that the format macros in inttypes.h should be defined by the C++ implementations only when __STDC_FORMAT_MACROS is defined, and the limit and constant macros in stdint.h should be defined only when __STDC_LIMIT_MACROS and __STDC_CONSTANT_MACROS are defined appropriately. Following this specification, multiple old versions of glibc up to 2.17 do not define those macros by default for C++, rendering the libc++ headers non-compliant to the C++11 standard. In order to achieve the necessary compliance, __STDC_FORMAT_MACROS is defined in wrapped inttypes.h just before including the system inttypes.h, when C++11 or newer is used. Both __STDC_LIMIT_MACROS and __STDC_CONSTANT_MACROS are defined in newly-wrapped stdint.h. This fixes the C++11 compliance while preserving the current behavior for C++03. Differential Revision: https://reviews.llvm.org/D24903 llvm-svn: 282435
122 lines
2.0 KiB
C++
122 lines
2.0 KiB
C++
// -*- C++ -*-
|
|
//===---------------------------- stdint.h --------------------------------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef _LIBCPP_STDINT_H
|
|
#define _LIBCPP_STDINT_H
|
|
|
|
/*
|
|
stdint.h synopsis
|
|
|
|
Macros:
|
|
|
|
INT8_MIN
|
|
INT16_MIN
|
|
INT32_MIN
|
|
INT64_MIN
|
|
|
|
INT8_MAX
|
|
INT16_MAX
|
|
INT32_MAX
|
|
INT64_MAX
|
|
|
|
UINT8_MAX
|
|
UINT16_MAX
|
|
UINT32_MAX
|
|
UINT64_MAX
|
|
|
|
INT_LEAST8_MIN
|
|
INT_LEAST16_MIN
|
|
INT_LEAST32_MIN
|
|
INT_LEAST64_MIN
|
|
|
|
INT_LEAST8_MAX
|
|
INT_LEAST16_MAX
|
|
INT_LEAST32_MAX
|
|
INT_LEAST64_MAX
|
|
|
|
UINT_LEAST8_MAX
|
|
UINT_LEAST16_MAX
|
|
UINT_LEAST32_MAX
|
|
UINT_LEAST64_MAX
|
|
|
|
INT_FAST8_MIN
|
|
INT_FAST16_MIN
|
|
INT_FAST32_MIN
|
|
INT_FAST64_MIN
|
|
|
|
INT_FAST8_MAX
|
|
INT_FAST16_MAX
|
|
INT_FAST32_MAX
|
|
INT_FAST64_MAX
|
|
|
|
UINT_FAST8_MAX
|
|
UINT_FAST16_MAX
|
|
UINT_FAST32_MAX
|
|
UINT_FAST64_MAX
|
|
|
|
INTPTR_MIN
|
|
INTPTR_MAX
|
|
UINTPTR_MAX
|
|
|
|
INTMAX_MIN
|
|
INTMAX_MAX
|
|
|
|
UINTMAX_MAX
|
|
|
|
PTRDIFF_MIN
|
|
PTRDIFF_MAX
|
|
|
|
SIG_ATOMIC_MIN
|
|
SIG_ATOMIC_MAX
|
|
|
|
SIZE_MAX
|
|
|
|
WCHAR_MIN
|
|
WCHAR_MAX
|
|
|
|
WINT_MIN
|
|
WINT_MAX
|
|
|
|
INT8_C(value)
|
|
INT16_C(value)
|
|
INT32_C(value)
|
|
INT64_C(value)
|
|
|
|
UINT8_C(value)
|
|
UINT16_C(value)
|
|
UINT32_C(value)
|
|
UINT64_C(value)
|
|
|
|
INTMAX_C(value)
|
|
UINTMAX_C(value)
|
|
|
|
*/
|
|
|
|
#include <__config>
|
|
|
|
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
|
#pragma GCC system_header
|
|
#endif
|
|
|
|
/* C99 stdlib (e.g. glibc < 2.18) does not provide macros needed
|
|
for C++11 unless __STDC_LIMIT_MACROS and __STDC_CONSTANT_MACROS
|
|
are defined
|
|
*/
|
|
#if defined(__cplusplus) && !defined(__STDC_LIMIT_MACROS)
|
|
# define __STDC_LIMIT_MACROS
|
|
#endif
|
|
#if defined(__cplusplus) && !defined(__STDC_CONSTANT_MACROS)
|
|
# define __STDC_CONSTANT_MACROS
|
|
#endif
|
|
|
|
#include_next <stdint.h>
|
|
|
|
#endif // _LIBCPP_STDINT_H
|