|  | 
| 14 | 14 |  * need to use some of its interfaces. Otherwise this header provides all of | 
| 15 | 15 |  * the expected interfaces. | 
| 16 | 16 |  * | 
| 17 |  | - * When clang modules are enabled, this header is a textual header. It ignores | 
| 18 |  | - * its header guard so that multiple submodules can export its interfaces. | 
| 19 |  | - * Take module SM with submodules A and B, whose headers both include stddef.h | 
| 20 |  | - * When SM.A builds, __STDDEF_H will be defined. When SM.B builds, the | 
| 21 |  | - * definition from SM.A will leak when building without local submodule | 
| 22 |  | - * visibility. stddef.h wouldn't include any of its implementation headers, and | 
| 23 |  | - * SM.B wouldn't import any of the stddef modules, and SM.B's `export *` | 
| 24 |  | - * wouldn't export any stddef interfaces as expected. However, since stddef.h | 
| 25 |  | - * ignores its header guard when building with modules, it all works as | 
| 26 |  | - * expected. | 
| 27 |  | - * | 
| 28 |  | - * When clang modules are not enabled, the header guards can function in the | 
| 29 |  | - * normal simple fashion. | 
|  | 17 | + * When clang modules are enabled, this header is a textual header to support | 
|  | 18 | + * the multiple include behavior. As such, it doesn't directly declare anything | 
|  | 19 | + * so that it doesn't add duplicate declarations to all of its includers' | 
|  | 20 | + * modules. | 
| 30 | 21 |  */ | 
| 31 |  | -#if !defined(__STDDEF_H) || __has_feature(modules) ||                          \ | 
| 32 |  | -    (defined(__STDC_WANT_LIB_EXT1__) && __STDC_WANT_LIB_EXT1__ >= 1) ||        \ | 
| 33 |  | -    defined(__need_ptrdiff_t) || defined(__need_size_t) ||                     \ | 
| 34 |  | -    defined(__need_rsize_t) || defined(__need_wchar_t) ||                      \ | 
| 35 |  | -    defined(__need_NULL) || defined(__need_nullptr_t) ||                       \ | 
| 36 |  | -    defined(__need_unreachable) || defined(__need_max_align_t) ||              \ | 
| 37 |  | -    defined(__need_offsetof) || defined(__need_wint_t) | 
| 38 |  | - | 
| 39 | 22 | #if defined(__MVS__) && __has_include_next(<stddef.h>) | 
| 40 |  | -#define __STDDEF_H | 
|  | 23 | +#include <__stddef_header_macro.h> | 
| 41 | 24 | #undef __need_ptrdiff_t | 
| 42 | 25 | #undef __need_size_t | 
| 43 | 26 | #undef __need_rsize_t | 
|  | 
| 57 | 40 |     !defined(__need_NULL) && !defined(__need_nullptr_t) &&                     \ | 
| 58 | 41 |     !defined(__need_unreachable) && !defined(__need_max_align_t) &&            \ | 
| 59 | 42 |     !defined(__need_offsetof) && !defined(__need_wint_t) | 
| 60 |  | -#define __STDDEF_H | 
|  | 43 | +#include <__stddef_header_macro.h> | 
| 61 | 44 | #define __need_ptrdiff_t | 
| 62 | 45 | #define __need_size_t | 
| 63 | 46 | /* ISO9899:2011 7.20 (C11 Annex K): Define rsize_t if __STDC_WANT_LIB_EXT1__ is | 
| @@ -137,4 +120,3 @@ __WINT_TYPE__ directly; accommodate both by requiring __need_wint_t */ | 
| 137 | 120 | #endif /* __need_wint_t */ | 
| 138 | 121 | 
 | 
| 139 | 122 | #endif /* __MVS__ */ | 
| 140 |  | -#endif | 
0 commit comments