Skip to content

[clang][modules] Enable built-in modules for the upcoming Apple releases #6

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Mar 12, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions clang/include/clang/Basic/LangOptions.def
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,7 @@ BENIGN_LANGOPT(HeinousExtensions , 1, 0, "extensions that we really don't like a
LANGOPT(Modules , 1, 0, "modules semantics")
COMPATIBLE_LANGOPT(ModulesTS , 1, 0, "C++ Modules TS syntax")
COMPATIBLE_LANGOPT(CPlusPlusModules, 1, 0, "C++ modules syntax")
LANGOPT(BuiltinHeadersInSystemModules, 1, 0, "builtin headers belong to system modules, and _Builtin_ modules are ignored for cstdlib headers")
BENIGN_ENUM_LANGOPT(CompilingModule, CompilingModuleKind, 3, CMK_None,
"compiling a module interface")
BENIGN_LANGOPT(CompilingPCH, 1, 0, "building a pch")
Expand Down
6 changes: 6 additions & 0 deletions clang/include/clang/Driver/Options.td
Original file line number Diff line number Diff line change
Expand Up @@ -2407,6 +2407,12 @@ defm modules : BoolFOption<"modules",
LangOpts<"Modules">, Default<!strconcat(fmodules_ts.KeyPath, "||", fcxx_modules.KeyPath)>,
PosFlag<SetTrue, [CC1Option], "Enable the 'modules' language feature">,
NegFlag<SetFalse>, BothFlags<[NoXarchOption, CoreOption]>>;
def fbuiltin_headers_in_system_modules : Flag <["-"], "fbuiltin-headers-in-system-modules">,
Group<f_Group>,
Flags<[NoXarchOption,CC1Option]>,
ShouldParseIf<fmodules.KeyPath>,
HelpText<"builtin headers belong to system modules, and _Builtin_ modules are ignored for cstdlib headers">,
MarshallingInfoFlag<LangOpts<"BuiltinHeadersInSystemModules">>;
def fmodule_maps : Flag <["-"], "fmodule-maps">, Flags<[CoreOption]>, Alias<fimplicit_module_maps>;
def fmodule_name_EQ : Joined<["-"], "fmodule-name=">, Group<f_Group>,
Flags<[NoXarchOption,CC1Option,CoreOption]>, MetaVarName<"<name>">,
Expand Down
1 change: 0 additions & 1 deletion clang/include/clang/Lex/ModuleMap.h
Original file line number Diff line number Diff line change
Expand Up @@ -427,7 +427,6 @@ class ModuleMap {
}

/// Is this a compiler builtin header?
static bool isBuiltinHeader(StringRef FileName);
bool isBuiltinHeader(const FileEntry *File);

/// Add a module map callback.
Expand Down
66 changes: 66 additions & 0 deletions clang/lib/Driver/ToolChains/Darwin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2984,6 +2984,58 @@ bool Darwin::isAlignedAllocationUnavailable() const {
return TargetVersion < alignedAllocMinVersion(OS);
}

static bool sdkSupportsBuiltinModules(
const Darwin::DarwinPlatformKind &TargetPlatform,
const Darwin::DarwinEnvironmentKind &TargetEnvironment,
const Optional<DarwinSDKInfo> &SDKInfo) {
switch (TargetEnvironment) {
case Darwin::NativeEnvironment:
case Darwin::Simulator:
case Darwin::MacCatalyst:
// Standard xnu/Mach/Darwin based environments
// depend on the SDK version.
break;
default:
// All other environments support builtin modules from the start.
return true;
}

if (!SDKInfo)
// If there is no SDK info, assume this is building against a
// pre-SDK version of macOS (i.e. before Mac OS X 10.4). Those
// don't support modules anyway, but the headers definitely
// don't support builtin modules either. It might also be some
// kind of degenerate build environment, err on the side of
// the old behavior which is to not use builtin modules.
return false;

VersionTuple SDKVersion = SDKInfo->getVersion();
switch (TargetPlatform) {
// Existing SDKs added support for builtin modules in the fall
// 2024 major releases.
case Darwin::MacOS:
return SDKVersion >= VersionTuple(15U);
case Darwin::IPhoneOS:
switch (TargetEnvironment) {
case Darwin::MacCatalyst:
// Mac Catalyst uses `-target arm64-apple-ios18.0-macabi` so the platform
// is iOS, but it builds with the macOS SDK, so it's the macOS SDK version
// that's relevant.
return SDKVersion >= VersionTuple(15U);
default:
return SDKVersion >= VersionTuple(18U);
}
case Darwin::TvOS:
return SDKVersion >= VersionTuple(18U);
case Darwin::WatchOS:
return SDKVersion >= VersionTuple(11U);

// New SDKs support builtin modules from the start.
default:
return true;
}
}

void Darwin::addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
llvm::opt::ArgStringList &CC1Args,
Action::OffloadKind DeviceOffloadKind) const {
Expand Down Expand Up @@ -3055,6 +3107,20 @@ void Darwin::addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
options::OPT_fvisibility_inlines_hidden_static_local_var,
options::OPT_fno_visibility_inlines_hidden_static_local_var))
CC1Args.push_back("-fvisibility-inlines-hidden-static-local-var");

// Earlier versions of the darwin SDK have the C standard library headers
// all together in the Darwin module. That leads to module cycles with
// the _Builtin_ modules. e.g. <inttypes.h> on darwin includes <stdint.h>.
// The builtin <stdint.h> include-nexts <stdint.h>. When both of those
// darwin headers are in the Darwin module, there's a module cycle Darwin ->
// _Builtin_stdint -> Darwin (i.e. inttypes.h (darwin) -> stdint.h (builtin) ->
// stdint.h (darwin)). This is fixed in later versions of the darwin SDK,
// but until then, the builtin headers need to join the system modules.
// i.e. when the builtin stdint.h is in the Darwin module too, the cycle
// goes away. Note that -fbuiltin-headers-in-system-modules does nothing
// to fix the same problem with C++ headers, and is generally fragile.
if (!sdkSupportsBuiltinModules(TargetPlatform, TargetEnvironment, SDKInfo))
CC1Args.push_back("-fbuiltin-headers-in-system-modules");
}

DerivedArgList *
Expand Down
69 changes: 46 additions & 23 deletions clang/lib/Lex/ModuleMap.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,45 @@ Optional<FileEntryRef> ModuleMap::findHeader(
return NormalHdrFile;
}

/// Determine whether the given file name is the name of a builtin
/// header, supplied by Clang to replace, override, or augment existing system
/// headers.
static bool isBuiltinHeaderName(StringRef FileName) {
return llvm::StringSwitch<bool>(FileName)
.Case("float.h", true)
.Case("iso646.h", true)
.Case("limits.h", true)
.Case("stdalign.h", true)
.Case("stdarg.h", true)
.Case("stdatomic.h", true)
.Case("stdbool.h", true)
.Case("stddef.h", true)
.Case("stdint.h", true)
.Case("tgmath.h", true)
.Case("unwind.h", true)
.Default(false);
}

/// Determine whether the given module name is the name of a builtin
/// module that is cyclic with a system module on some platforms.
static bool isBuiltInModuleName(StringRef ModuleName) {
return llvm::StringSwitch<bool>(ModuleName)
.Case("_Builtin_float", true)
.Case("_Builtin_inttypes", true)
.Case("_Builtin_iso646", true)
.Case("_Builtin_limits", true)
.Case("_Builtin_stdalign", true)
.Case("_Builtin_stdarg", true)
.Case("_Builtin_stdatomic", true)
.Case("_Builtin_stdbool", true)
.Case("_Builtin_stddef", true)
.Case("_Builtin_stdint", true)
.Case("_Builtin_stdnoreturn", true)
.Case("_Builtin_tgmath", true)
.Case("_Builtin_unwind", true)
.Default(false);
}

void ModuleMap::resolveHeader(Module *Mod,
const Module::UnresolvedHeaderDirective &Header,
bool &NeedsFramework) {
Expand Down Expand Up @@ -296,7 +335,7 @@ bool ModuleMap::resolveAsBuiltinHeader(
llvm::sys::path::is_absolute(Header.FileName) ||
Mod->isPartOfFramework() || !Mod->IsSystem || Header.IsUmbrella ||
!BuiltinIncludeDir || BuiltinIncludeDir == Mod->Directory ||
!isBuiltinHeader(Header.FileName))
!LangOpts.BuiltinHeadersInSystemModules || !isBuiltinHeaderName(Header.FileName))
return false;

// This is a system module with a top-level header. This header
Expand Down Expand Up @@ -372,28 +411,9 @@ static StringRef sanitizeFilenameAsIdentifier(StringRef Name,
return Name;
}

/// Determine whether the given file name is the name of a builtin
/// header, supplied by Clang to replace, override, or augment existing system
/// headers.
bool ModuleMap::isBuiltinHeader(StringRef FileName) {
return llvm::StringSwitch<bool>(FileName)
.Case("float.h", true)
.Case("iso646.h", true)
.Case("limits.h", true)
.Case("stdalign.h", true)
.Case("stdarg.h", true)
.Case("stdatomic.h", true)
.Case("stdbool.h", true)
.Case("stddef.h", true)
.Case("stdint.h", true)
.Case("tgmath.h", true)
.Case("unwind.h", true)
.Default(false);
}

bool ModuleMap::isBuiltinHeader(const FileEntry *File) {
return File->getDir() == BuiltinIncludeDir &&
ModuleMap::isBuiltinHeader(llvm::sys::path::filename(File->getName()));
return File->getDir() == BuiltinIncludeDir && LangOpts.BuiltinHeadersInSystemModules &&
isBuiltinHeaderName(llvm::sys::path::filename(File->getName()));
}

ModuleMap::HeadersMap::iterator
Expand Down Expand Up @@ -2513,7 +2533,10 @@ void ModuleMapParser::parseHeaderDecl(MMToken::TokenKind LeadingToken,
}

bool NeedsFramework = false;
Map.addUnresolvedHeader(ActiveModule, std::move(Header), NeedsFramework);
// Don't add the top level headers to the builtin modules if the builtin headers
// belong to the system modules.
if (!Map.LangOpts.BuiltinHeadersInSystemModules || ActiveModule->isSubModule() || !isBuiltInModuleName(ActiveModule->Name))
Map.addUnresolvedHeader(ActiveModule, std::move(Header), NeedsFramework);

if (NeedsFramework && ActiveModule)
Diags.Report(CurrModuleDeclLoc, diag::note_mmap_add_framework_keyword)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"Version":"23.0", "MaximumDeploymentTarget": "23.0.99"}
1 change: 1 addition & 0 deletions clang/test/Driver/Inputs/MacOSX15.0.sdk/SDKSettings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"Version":"990.0", "MaximumDeploymentTarget": "99.0.99"}
1 change: 1 addition & 0 deletions clang/test/Driver/Inputs/MacOSX15.1.sdk/SDKSettings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"Version":"15.1", "MaximumDeploymentTarget": "15.1.99"}
15 changes: 15 additions & 0 deletions clang/test/Driver/darwin-builtin-modules.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// Check that darwin passes -fbuiltin-headers-in-system-modules
// when expected.

// RUN: %clang -target x86_64-apple-darwin22.4 -### %s 2>&1 | FileCheck %s
// RUN: %clang -isysroot %S/Inputs/MacOSX10.15.versioned.sdk -target x86_64-apple-macos10.15 -### %s 2>&1 | FileCheck %s
// RUN: %clang -isysroot %S/Inputs/iPhoneOS13.0.sdk -target arm64-apple-ios13.0 -### %s 2>&1 | FileCheck %s
// CHECK: -fbuiltin-headers-in-system-modules

// RUN: %clang -isysroot %S/Inputs/MacOSX15.0.sdk -target x86_64-apple-macos14.0 -### %s 2>&1 | FileCheck --check-prefix=CHECK_FUTURE %s
// RUN: %clang -isysroot %S/Inputs/MacOSX15.0.sdk -target x86_64-apple-macos15.0 -### %s 2>&1 | FileCheck --check-prefix=CHECK_FUTURE %s
// RUN: %clang -isysroot %S/Inputs/MacOSX15.0.sdk -target x86_64-apple-ios18.0-macabi -### %s 2>&1 | FileCheck --check-prefix=CHECK_FUTURE %s
// RUN: %clang -isysroot %S/Inputs/MacOSX15.1.sdk -target x86_64-apple-macos15.1 -darwin-target-variant x86_64-apple-ios18.1-macabi -### %s 2>&1 | FileCheck --check-prefix=CHECK_FUTURE %s
// RUN: %clang -isysroot %S/Inputs/MacOSX15.1.sdk -target x86_64-apple-ios18.1-macabi -darwin-target-variant x86_64-apple-macos15.1 -### %s 2>&1 | FileCheck --check-prefix=CHECK_FUTURE %s
// RUN: %clang -isysroot %S/Inputs/DriverKit23.0.sdk -target arm64-apple-driverkit23.0 -### %s 2>&1 | FileCheck --check-prefix=CHECK_FUTURE %s
// CHECK_FUTURE-NOT: -fbuiltin-headers-in-system-modules
16 changes: 9 additions & 7 deletions clang/test/Modules/Werror-Wsystem-headers.m
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,21 @@
// RUN: mkdir %t-saved

// Initial module build
// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -fdisable-module-hash \
// RUN: -isystem %S/Inputs/System/usr/include -fsyntax-only %s -verify
// 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 -fmodules-cache-path=%t -fdisable-module-hash \
// RUN: -isystem %S/Inputs/System/usr/include -fsyntax-only %s -verify -Werror
// 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 -fmodules-cache-path=%t -fdisable-module-hash \
// RUN: -isystem %S/Inputs/System/usr/include -fsyntax-only %s -verify \
// RUN: -Werror=unused -Wsystem-headers
// 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
Expand Down
23 changes: 13 additions & 10 deletions clang/test/Modules/context-hash.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,24 @@
// RUN: rm -rf %t
// RUN: %clang_cc1 -fsyntax-only -internal-isystem \
// RUN: %S/Inputs/System/usr/include -fmodules -fimplicit-module-maps \
// RUN: -fmodules-cache-path=%t %s -Rmodule-build 2> %t1
// RUN: -fbuiltin-headers-in-system-modules -fmodules-cache-path=%t %s \
// RUN: -Rmodule-build 2> %t1
// RUN: rm -rf %t
// RUN: %clang_cc1 -fsyntax-only -internal-isystem \
// RUN: %S/Inputs/System/usr/include -internal-isystem %S -fmodules \
// RUN: -fimplicit-module-maps -fmodules-cache-path=%t %s -Rmodule-build 2> \
// RUN: %t2
// RUN: -fbuiltin-headers-in-system-modules -fimplicit-module-maps \
// RUN: -fmodules-cache-path=%t %s -Rmodule-build 2> %t2
// RUN: rm -rf %t
// RUN: %clang_cc1 -fsyntax-only -internal-isystem \
// RUN: %S/Inputs/System/usr/include -internal-isystem %S -fmodules \
// RUN: -fimplicit-module-maps -fmodules-cache-path=%t %s \
// RUN: -fmodules-strict-context-hash -Rmodule-build 2> %t3
// RUN: -fbuiltin-headers-in-system-modules -fimplicit-module-maps \
// RUN: -fmodules-cache-path=%t %s -fmodules-strict-context-hash \
// RUN: -Rmodule-build 2> %t3
// RUN: rm -rf %t
// RUN: %clang_cc1 -fsyntax-only -Weverything -internal-isystem \
// RUN: %S/Inputs/System/usr/include -fmodules -fmodules-strict-context-hash \
// RUN: -fimplicit-module-maps -fmodules-cache-path=%t %s -Rmodule-build 2> \
// RUN: %t4
// RUN: -fbuiltin-headers-in-system-modules -fimplicit-module-maps \
// RUN: -fmodules-cache-path=%t %s -Rmodule-build 2> %t4
// RUN: echo %t > %t.path
// RUN: cat %t.path %t1 %t2 %t3 %t4 | FileCheck %s

Expand All @@ -29,16 +31,17 @@
// RUN: rm -rf %t
// RUN: %clang_cc1 -fsyntax-only -internal-isystem \
// RUN: %S/Inputs/System/usr/include -fmodules -fimplicit-module-maps \
// RUN: -fmodules-cache-path=%t -x objective-c %s -Rmodule-build 2> %t1
// RUN: -fbuiltin-headers-in-system-modules -fmodules-cache-path=%t \
// RUN: -x objective-c %s -Rmodule-build 2> %t1
// RUN: rm -rf %t
// RUN: %clang_cc1 -fsyntax-only -internal-isystem \
// RUN: %S/Inputs/System/usr/include -fmodules -fimplicit-module-maps \
// RUN: -fobjc-runtime=macosx-1.0.0.0 \
// RUN: -fbuiltin-headers-in-system-modules -fobjc-runtime=macosx-1.0.0.0 \
// RUN: -fmodules-cache-path=%t -x objective-c %s -Rmodule-build 2> %t2
// RUN: rm -rf %t
// RUN: %clang_cc1 -fsyntax-only -internal-isystem \
// RUN: %S/Inputs/System/usr/include -fmodules -fimplicit-module-maps \
// RUN: -fcomment-block-commands=lp,bj \
// RUN: -fbuiltin-headers-in-system-modules -fcomment-block-commands=lp,bj \
// RUN: -fmodules-cache-path=%t -x objective-c %s -Rmodule-build 2> %t3
// RUN: echo %t > %t.path
// RUN: cat %t.path %t1 %t2 %t3 | FileCheck --check-prefix=LANGOPTS %s
Expand Down
8 changes: 4 additions & 4 deletions clang/test/Modules/crash-vfs-include-pch.m
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@

// RUN: %clang_cc1 -x objective-c-header -emit-pch %S/Inputs/pch-used.h \
// RUN: -o %t/out/pch-used.h.pch -fmodules -fimplicit-module-maps \
// RUN: -fmodules-cache-path=%t/cache -O0 \
// RUN: -fbuiltin-headers-in-system-modules -fmodules-cache-path=%t/cache -O0 \
// RUN: -isystem %S/Inputs/System/usr/include

// RUN: env FORCE_CLANG_DIAGNOSTICS_CRASH= TMPDIR=%t TEMP=%t TMP=%t \
// RUN: not %clang %s -E -include-pch %t/out/pch-used.h.pch -fmodules -nostdlibinc \
// RUN: -fimplicit-module-maps -fmodules-cache-path=%t/cache -O0 \
// RUN: -Xclang -fno-validate-pch -isystem %S/Inputs/System/usr/include \
// RUN: -o %t/output.E 2>&1 | FileCheck %s
// RUN: -fimplicit-module-maps -fbuiltin-headers-in-system-modules \
// RUN: -fmodules-cache-path=%t/cache -O0 -Xclang -fno-validate-pch \
// RUN: -isystem %S/Inputs/System/usr/include -o %t/output.E 2>&1 | FileCheck %s

// RUN: FileCheck --check-prefix=CHECKSH %s -input-file %t/crash-vfs-*.sh
// RUN: FileCheck --check-prefix=CHECKYAML %s -input-file \
Expand Down
2 changes: 1 addition & 1 deletion clang/test/Modules/cstd.m
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// RUN: rm -rf %t
// RUN: %clang_cc1 -fsyntax-only -internal-isystem %S/Inputs/System/usr/include -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -D__need_wint_t -Werror=implicit-function-declaration %s
// 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;
Expand Down
4 changes: 2 additions & 2 deletions clang/test/Modules/pch-used.m
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
// UNSUPPORTED: -zos, -aix
// RUN: rm -rf %t
// RUN: mkdir %t
// RUN: %clang_cc1 -x objective-c-header -emit-pch %S/Inputs/pch-used.h -o %t/pch-used.h.pch -fmodules -fimplicit-module-maps -fmodules-cache-path=%t/cache -O0 -isystem %S/Inputs/System/usr/include
// RUN: %clang_cc1 %s -include-pch %t/pch-used.h.pch -fmodules -fimplicit-module-maps -fmodules-cache-path=%t/cache -O0 -isystem %S/Inputs/System/usr/include -emit-llvm -o - | FileCheck %s
// RUN: %clang_cc1 -x objective-c-header -emit-pch %S/Inputs/pch-used.h -o %t/pch-used.h.pch -fmodules -fimplicit-module-maps -fbuiltin-headers-in-system-modules -fmodules-cache-path=%t/cache -O0 -isystem %S/Inputs/System/usr/include
// RUN: %clang_cc1 %s -include-pch %t/pch-used.h.pch -fmodules -fimplicit-module-maps -fbuiltin-headers-in-system-modules -fmodules-cache-path=%t/cache -O0 -isystem %S/Inputs/System/usr/include -emit-llvm -o - | FileCheck %s

void f(void) { SPXTrace(); }
void g(void) { double x = DBL_MAX; }
Expand Down
2 changes: 1 addition & 1 deletion clang/test/Modules/shadowed-submodule.m
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// RUN: rm -rf %t
// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -I %S/Inputs/shadowed-submodule/Foo -I %S/Inputs/shadowed-submodule/A2 %s -verify
// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fbuiltin-headers-in-system-modules -fmodules-cache-path=%t -I %S/Inputs/shadowed-submodule/Foo -I %S/Inputs/shadowed-submodule/A2 %s -verify

@import Foo; // expected-error {{module 'A' was built in directory}}
// [email protected]:4 {{imported by module 'Foo'}}
2 changes: 1 addition & 1 deletion clang/test/Modules/stddef.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// RUN: rm -rf %t
// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -I%S/Inputs/StdDef %s -verify -fno-modules-error-recovery
// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fbuiltin-headers-in-system-modules -fmodules-cache-path=%t -I%S/Inputs/StdDef %s -verify -fno-modules-error-recovery

#include "ptrdiff_t.h"

Expand Down
2 changes: 1 addition & 1 deletion clang/test/Modules/stddef.m
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
size_t getSize(void);

// RUN: rm -rf %t
// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -I %S/Inputs/StdDef %s -verify
// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fbuiltin-headers-in-system-modules -fmodules-cache-path=%t -I %S/Inputs/StdDef %s -verify
// expected-no-diagnostics