diff --git a/libcxx/include/ext/__hash b/libcxx/include/ext/__hash index 880d0eebef49..0e6c2cc05b52 100644 --- a/libcxx/include/ext/__hash +++ b/libcxx/include/ext/__hash @@ -14,7 +14,6 @@ #include <__config> #include -#include #include namespace __gnu_cxx { diff --git a/libcxx/include/module.modulemap.in b/libcxx/include/module.modulemap.in index bc4526b5d05d..5f07d9df0a59 100644 --- a/libcxx/include/module.modulemap.in +++ b/libcxx/include/module.modulemap.in @@ -75,12 +75,14 @@ module std [system] { export Darwin.C.stdint } module stdio_h { - header "stdio.h" + // 's __need_* macros require textual inclusion. + textual header "stdio.h" export * export Darwin.C.stdio } module stdlib_h { - header "stdlib.h" + // 's __need_* macros require textual inclusion. + textual header "stdlib.h" export * } module string_h { @@ -94,7 +96,8 @@ module std [system] { // provided by C library. module wchar_h { @requires_LIBCXX_ENABLE_WIDE_CHARACTERS@ - header "wchar.h" + // 's __need_* macros require textual inclusion. + textual header "wchar.h" export * } module wctype_h { diff --git a/libcxx/include/stdbool.h b/libcxx/include/stdbool.h index 74869b46d561..5bba00568dff 100644 --- a/libcxx/include/stdbool.h +++ b/libcxx/include/stdbool.h @@ -6,7 +6,6 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// - #ifndef _LIBCPP_STDBOOL_H #define _LIBCPP_STDBOOL_H diff --git a/libcxx/include/stddef.h b/libcxx/include/stddef.h index e97100b2f8c3..f1725db06212 100644 --- a/libcxx/include/stddef.h +++ b/libcxx/include/stddef.h @@ -7,7 +7,16 @@ // //===----------------------------------------------------------------------===// -#ifndef _LIBCPP_STDDEF_H +#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 + +#elif !defined(_LIBCPP_STDDEF_H) #define _LIBCPP_STDDEF_H /* @@ -33,38 +42,9 @@ Types: # pragma GCC system_header #endif -#if __has_include_next() - // 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 +# if __has_include_next() +# include_next # 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 - - // 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 -#endif #ifdef __cplusplus typedef decltype(nullptr) nullptr_t; diff --git a/libcxx/include/stdio.h b/libcxx/include/stdio.h index 4ca40df2b526..cea43aa7680b 100644 --- a/libcxx/include/stdio.h +++ b/libcxx/include/stdio.h @@ -7,7 +7,15 @@ // //===----------------------------------------------------------------------===// -#ifndef _LIBCPP_STDIO_H +#if defined(__need_FILE) || defined(__need___FILE) + +#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) +# pragma GCC system_header +#endif + +#include_next + +#elif !defined(_LIBCPP_STDIO_H) #define _LIBCPP_STDIO_H /* diff --git a/libcxx/include/stdlib.h b/libcxx/include/stdlib.h index 1c990c162956..64581b67f245 100644 --- a/libcxx/include/stdlib.h +++ b/libcxx/include/stdlib.h @@ -7,7 +7,15 @@ // //===----------------------------------------------------------------------===// -#ifndef _LIBCPP_STDLIB_H +#if defined(__need_malloc_and_calloc) + +#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) +# pragma GCC system_header +#endif + +#include_next + +#elif !defined(_LIBCPP_STDLIB_H) #define _LIBCPP_STDLIB_H /* diff --git a/libcxx/include/wchar.h b/libcxx/include/wchar.h index d34ed4d3a1cf..c684508dc2cc 100644 --- a/libcxx/include/wchar.h +++ b/libcxx/include/wchar.h @@ -7,7 +7,15 @@ // //===----------------------------------------------------------------------===// -#ifndef _LIBCPP_WCHAR_H +#if defined(__need_wint_t) || defined(__need_mbstate_t) + +#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) +# pragma GCC system_header +#endif + +#include_next + +#elif !defined(_LIBCPP_WCHAR_H) #define _LIBCPP_WCHAR_H /*