
On Apple platforms, some of the stddef.h types are also declared in system headers. In particular NULL has a conflicting declaration in <sys/_types/_null.h>. When that's in a different module from <__stddef_null.h>, redeclaration errors can occur. Make the \_\_stddef_ headers be non-modular in -fbuiltin-headers-in-system-modules and restore them back to not respecting their header guards. Still define the header guards though. __stddef_max_align_t.h was in _Builtin_stddef_max_align_t prior to the addition of _Builtin_stddef, and it needs to stay in a module because struct's can't be type merged. __stddef_wint_t.h didn't used to have a module, but leave it in it current module since it doesn't really belong to stddef.h.
15 lines
731 B
C++
15 lines
731 B
C++
// Test that a [no_undeclared_headers] module can include builtin headers, even
|
|
// if these have been "claimed" by a different module that wraps these builtin
|
|
// headers. libc++ does this, for example.
|
|
//
|
|
// The test inputs used here replicates the relationship between libc++ and
|
|
// glibc. When modularizing glibc, [no_undeclared_headers] must be used to
|
|
// prevent glibc from including the libc++ versions of the C standard library
|
|
// headers.
|
|
|
|
// RUN: rm -rf %t
|
|
// RUN: %clang_cc1 -fmodules-cache-path=%t -fmodules -fbuiltin-headers-in-system-modules -fimplicit-module-maps -I %S/Inputs/no-undeclared-includes-builtins/libcxx -I %S/Inputs/no-undeclared-includes-builtins/glibc %s
|
|
// expected-no-diagnostics
|
|
|
|
#include <stddef.h>
|