mirror of
https://github.com/intel/llvm.git
synced 2026-01-25 01:07:04 +08:00
[libc++] Remove workarounds for systems that used to require __need_XXX macros
Libc++ tried accomodating systems that need to be able to define various __need_FOO macros before including C library headers, however it does not appear to be needed anymore in most cases. Indeed, glibc used to use that system to conditionally provide definitions, however almost all instances of these macros have been removed from glibc years ago. I think the next step would be to also fix Clang's own builtin headers to stop needing these macros. Differential Revision: https://reviews.llvm.org/D131425
This commit is contained in:
@@ -14,6 +14,7 @@
|
||||
|
||||
#include <__config>
|
||||
#include <cstring>
|
||||
#include <stddef.h>
|
||||
#include <string>
|
||||
|
||||
namespace __gnu_cxx {
|
||||
|
||||
@@ -75,14 +75,12 @@ module std [system] {
|
||||
export Darwin.C.stdint
|
||||
}
|
||||
module stdio_h {
|
||||
// <stdio.h>'s __need_* macros require textual inclusion.
|
||||
textual header "stdio.h"
|
||||
header "stdio.h"
|
||||
export *
|
||||
export Darwin.C.stdio
|
||||
}
|
||||
module stdlib_h {
|
||||
// <stdlib.h>'s __need_* macros require textual inclusion.
|
||||
textual header "stdlib.h"
|
||||
header "stdlib.h"
|
||||
export *
|
||||
}
|
||||
module string_h {
|
||||
@@ -96,8 +94,7 @@ module std [system] {
|
||||
// <time.h> provided by C library.
|
||||
module wchar_h {
|
||||
@requires_LIBCXX_ENABLE_WIDE_CHARACTERS@
|
||||
// <wchar.h>'s __need_* macros require textual inclusion.
|
||||
textual header "wchar.h"
|
||||
header "wchar.h"
|
||||
export *
|
||||
}
|
||||
module wctype_h {
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef _LIBCPP_STDBOOL_H
|
||||
#define _LIBCPP_STDBOOL_H
|
||||
|
||||
|
||||
@@ -7,16 +7,7 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#if defined(__need_ptrdiff_t) || defined(__need_size_t) || \
|
||||
defined(__need_wchar_t) || defined(__need_NULL) || defined(__need_wint_t)
|
||||
|
||||
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
||||
# pragma GCC system_header
|
||||
#endif
|
||||
|
||||
#include_next <stddef.h>
|
||||
|
||||
#elif !defined(_LIBCPP_STDDEF_H)
|
||||
#ifndef _LIBCPP_STDDEF_H
|
||||
#define _LIBCPP_STDDEF_H
|
||||
|
||||
/*
|
||||
@@ -42,9 +33,38 @@ Types:
|
||||
# pragma GCC system_header
|
||||
#endif
|
||||
|
||||
# if __has_include_next(<stddef.h>)
|
||||
# include_next <stddef.h>
|
||||
#if __has_include_next(<stddef.h>)
|
||||
// The Clang builtin headers only define the types we need when we request it explicitly.
|
||||
// TODO: We should fix that in Clang and drop these defines.
|
||||
# ifndef __need_ptrdiff_t
|
||||
# define __need_ptrdiff_t
|
||||
# endif
|
||||
# ifndef __need_size_t
|
||||
# define __need_size_t
|
||||
# endif
|
||||
# ifndef __need_wchar_t
|
||||
# define __need_wchar_t
|
||||
# endif
|
||||
# ifndef __need_NULL
|
||||
# define __need_NULL
|
||||
# endif
|
||||
# ifndef __need_STDDEF_H_misc
|
||||
# define __need_STDDEF_H_misc
|
||||
# endif
|
||||
|
||||
# include_next <stddef.h>
|
||||
|
||||
// Now re-include the header without requesting any specific types, so as to get
|
||||
// any other remaining types from stddef.h. This can all go away once the Clang
|
||||
// buitin headers stop using these macros.
|
||||
# undef __need_ptrdiff_t
|
||||
# undef __need_size_t
|
||||
# undef __need_wchar_t
|
||||
# undef __need_NULL
|
||||
# undef __need_STDDEF_H_misc
|
||||
|
||||
# include_next <stddef.h>
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
typedef decltype(nullptr) nullptr_t;
|
||||
|
||||
@@ -7,15 +7,7 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#if defined(__need_FILE) || defined(__need___FILE)
|
||||
|
||||
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
||||
# pragma GCC system_header
|
||||
#endif
|
||||
|
||||
#include_next <stdio.h>
|
||||
|
||||
#elif !defined(_LIBCPP_STDIO_H)
|
||||
#ifndef _LIBCPP_STDIO_H
|
||||
#define _LIBCPP_STDIO_H
|
||||
|
||||
/*
|
||||
|
||||
@@ -7,15 +7,7 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#if defined(__need_malloc_and_calloc)
|
||||
|
||||
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
||||
# pragma GCC system_header
|
||||
#endif
|
||||
|
||||
#include_next <stdlib.h>
|
||||
|
||||
#elif !defined(_LIBCPP_STDLIB_H)
|
||||
#ifndef _LIBCPP_STDLIB_H
|
||||
#define _LIBCPP_STDLIB_H
|
||||
|
||||
/*
|
||||
|
||||
@@ -7,15 +7,7 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#if defined(__need_wint_t) || defined(__need_mbstate_t)
|
||||
|
||||
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
||||
# pragma GCC system_header
|
||||
#endif
|
||||
|
||||
#include_next <wchar.h>
|
||||
|
||||
#elif !defined(_LIBCPP_WCHAR_H)
|
||||
#ifndef _LIBCPP_WCHAR_H
|
||||
#define _LIBCPP_WCHAR_H
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user