
Including select builtin headers in system modules is a workaround for module cycles, primarily in Apple's Darwin module that includes all of its C standard library headers. The workaround is problematic because it doesn't include all of the builtin headers (inttypes.h is notably absent), and it also doesn't include C++ headers. The straightforward for for this is to make top level modules for all of the C standard library headers and unwind.h in C++, clang, and the OS. However, doing so in clang before the OS modules are ready re-introduces the module cycles. Add a -fbuiltin-headers-in-system-modules option to control if the special builtin headers belong to system modules or builtin modules. Pass the option by default for Apple. Reviewed By: ChuanqiXu, Bigcheese, benlangmuir Differential Revision: https://reviews.llvm.org/D159483
25 lines
1.0 KiB
Matlab
25 lines
1.0 KiB
Matlab
// RUN: rm -rf %t
|
|
// RUN: rm -rf %t-saved
|
|
// RUN: mkdir %t-saved
|
|
|
|
// Initial module build
|
|
// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fbuiltin-headers-in-system-modules \
|
|
// RUN: -fmodules-cache-path=%t -fdisable-module-hash -isystem %S/Inputs/System/usr/include \
|
|
// RUN: -fsyntax-only %s -verify
|
|
// RUN: cp %t/cstd.pcm %t-saved/cstd.pcm
|
|
|
|
// Even with -Werror don't rebuild a system module
|
|
// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fbuiltin-headers-in-system-modules \
|
|
// RUN: -fmodules-cache-path=%t -fdisable-module-hash -isystem %S/Inputs/System/usr/include \
|
|
// RUN: -fsyntax-only %s -verify -Werror
|
|
// RUN: diff %t/cstd.pcm %t-saved/cstd.pcm
|
|
|
|
// Unless -Wsystem-headers is on
|
|
// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fbuiltin-headers-in-system-modules \
|
|
// RUN: -fmodules-cache-path=%t -fdisable-module-hash -isystem %S/Inputs/System/usr/include \
|
|
// RUN: -fsyntax-only %s -verify -Werror=unused -Wsystem-headers
|
|
// RUN: not diff %t/cstd.pcm %t-saved/cstd.pcm
|
|
|
|
// expected-no-diagnostics
|
|
@import cstd;
|