mirror of
https://git.FreeBSD.org/src.git
synced 2026-06-02 11:24:32 +00:00
Partially revert libc++ commit aa7f377c965c, restoring stdint.h
This partially reverts upstream libc++ commit aa7f377c965c: [libc++] Remove libc++'s own stdint.h and locale.h (#107436) These headers are not doing anything beyond the system or compiler provided equivalent headers, so there's no real reason to keep them around. Reducing the number of C headers we provide in libc++ simplifies our header layering and reduces the potential for confusion when headers are layered incorrectly. The problem is that libc++'s own `stdint.h` _does_ do something: it defines `__STDC_LIMIT_MACROS` and `__STDC_CONSTANT_MACROS` before including the system `stdint.h`, causing the latter to expose macros like `SIZE_MAX`, `UINT64_C`, and others. If the `__STDC_LIMIT_MACROS` and `__STDC_CONSTANT_MACROS` macros are not exposed, C++ programs compiled for standards before C++11 can fail with errors due to those macros not being available. PR: 292067 MFC after: 1 month
This commit is contained in:
@@ -492,7 +492,6 @@ OLD_FILES+=usr/include/c++/v1/__type_traits/is_unsigned_integer.h
|
|||||||
OLD_FILES+=usr/include/c++/v1/__type_traits/noexcept_move_assign_container.h
|
OLD_FILES+=usr/include/c++/v1/__type_traits/noexcept_move_assign_container.h
|
||||||
OLD_FILES+=usr/include/c++/v1/experimental/__config
|
OLD_FILES+=usr/include/c++/v1/experimental/__config
|
||||||
OLD_FILES+=usr/include/c++/v1/locale.h
|
OLD_FILES+=usr/include/c++/v1/locale.h
|
||||||
OLD_FILES+=usr/include/c++/v1/stdint.h
|
|
||||||
|
|
||||||
# 20260420: remove perfmon
|
# 20260420: remove perfmon
|
||||||
OLD_FILES+=boot/kernel/perfmon.ko
|
OLD_FILES+=boot/kernel/perfmon.ko
|
||||||
|
|||||||
@@ -149,6 +149,14 @@ Types:
|
|||||||
# include <stdint.h>
|
# include <stdint.h>
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
# ifndef _LIBCPP_STDINT_H
|
||||||
|
# error <cstdint> tried including <stdint.h> but didn't find libc++'s <stdint.h> header. \
|
||||||
|
This usually means that your header search paths are not configured properly. \
|
||||||
|
The header search paths should contain the C++ Standard Library headers before \
|
||||||
|
any C Standard Library, and you are probably using compiler flags that make that \
|
||||||
|
not be the case.
|
||||||
|
# endif
|
||||||
|
|
||||||
# if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
# if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
||||||
# pragma GCC system_header
|
# pragma GCC system_header
|
||||||
# endif
|
# endif
|
||||||
|
|||||||
@@ -0,0 +1,127 @@
|
|||||||
|
// -*- C++ -*-
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
//
|
||||||
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||||
|
// See https://llvm.org/LICENSE.txt for license information.
|
||||||
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||||
|
//
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
#ifndef _LIBCPP_STDINT_H
|
||||||
|
// AIX system headers need stdint.h to be re-enterable while _STD_TYPES_T
|
||||||
|
// is defined until an inclusion of it without _STD_TYPES_T occurs, in which
|
||||||
|
// case the header guard macro is defined.
|
||||||
|
#if !defined(_AIX) || !defined(_STD_TYPES_T)
|
||||||
|
# define _LIBCPP_STDINT_H
|
||||||
|
#endif // _STD_TYPES_T
|
||||||
|
|
||||||
|
/*
|
||||||
|
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
|
||||||
|
|
||||||
|
#if __has_include_next(<stdint.h>)
|
||||||
|
# include_next <stdint.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // _LIBCPP_STDINT_H
|
||||||
@@ -232,6 +232,7 @@ STD_HEADERS+= stdatomic.h
|
|||||||
STD_HEADERS+= stdbool.h
|
STD_HEADERS+= stdbool.h
|
||||||
STD_HEADERS+= stddef.h
|
STD_HEADERS+= stddef.h
|
||||||
STD_HEADERS+= stdexcept
|
STD_HEADERS+= stdexcept
|
||||||
|
STD_HEADERS+= stdint.h
|
||||||
STD_HEADERS+= stdio.h
|
STD_HEADERS+= stdio.h
|
||||||
STD_HEADERS+= stdlib.h
|
STD_HEADERS+= stdlib.h
|
||||||
STD_HEADERS+= stop_token
|
STD_HEADERS+= stop_token
|
||||||
|
|||||||
@@ -2433,6 +2433,10 @@ module std_stddef_h [system] {
|
|||||||
// <stddef.h> supports being included multiple times with different pre-defined macros
|
// <stddef.h> supports being included multiple times with different pre-defined macros
|
||||||
textual header "stddef.h"
|
textual header "stddef.h"
|
||||||
}
|
}
|
||||||
|
module std_stdint_h [system] {
|
||||||
|
// <stdint.h> supports being included multiple times with different pre-defined macros
|
||||||
|
textual header "stdint.h"
|
||||||
|
}
|
||||||
module std_stdio_h [system] {
|
module std_stdio_h [system] {
|
||||||
// <stdio.h> supports being included multiple times with different pre-defined macros
|
// <stdio.h> supports being included multiple times with different pre-defined macros
|
||||||
textual header "stdio.h"
|
textual header "stdio.h"
|
||||||
|
|||||||
Reference in New Issue
Block a user