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
31 lines
868 B
Objective-C
31 lines
868 B
Objective-C
// RUN: rm -rf %t
|
|
// RUN: %clang_cc1 -fsyntax-only -internal-isystem %S/Inputs/System/usr/include -fmodules -fimplicit-module-maps -fbuiltin-headers-in-system-modules -fmodules-cache-path=%t -D__need_wint_t -Werror=implicit-function-declaration %s
|
|
|
|
@import uses_other_constants;
|
|
const double other_value = DBL_MAX;
|
|
|
|
// Supplied by compiler, but referenced from the "/usr/include" module map.
|
|
@import cstd.float_constants;
|
|
|
|
float getFltMax(void) { return FLT_MAX; }
|
|
|
|
// Supplied by the "/usr/include" module map.
|
|
@import cstd.stdio;
|
|
|
|
void test_fprintf(FILE *file) {
|
|
fprintf(file, "Hello, modules\n");
|
|
}
|
|
|
|
// Supplied by compiler, which forwards to the "/usr/include" version.
|
|
@import cstd.stdint;
|
|
|
|
my_awesome_nonstandard_integer_type value2;
|
|
|
|
// Supplied by the compiler; that version wins.
|
|
@import cstd.stdbool;
|
|
|
|
#ifndef bool
|
|
# error "bool was not defined!"
|
|
#endif
|
|
|