diff --git a/include/swift/Basic/FileTypes.def b/include/swift/Basic/FileTypes.def index f2a832821a0..5ac6275ea52 100644 --- a/include/swift/Basic/FileTypes.def +++ b/include/swift/Basic/FileTypes.def @@ -73,6 +73,13 @@ TYPE("module-trace", ModuleTrace, "trace.json", "") TYPE("index-data", IndexData, "", "") TYPE("opt-record", OptRecord, "opt.yaml", "") +// Overlay files declare wrapper modules, called "separately-imported overlays", +// that should be automatically imported when a particular module is imported. +// Cross-import directories conditionalize overlay files so they only take +// effect when certain other modules are also loaded. +TYPE("swiftcrossimport", SwiftCrossImportDir, "swiftcrossimport","") +TYPE("swiftoverlay", SwiftOverlayFile, "swiftoverlay", "") + // Misc types TYPE("pcm", ClangModuleFile, "pcm", "") TYPE("pch", PCH, "pch", "") diff --git a/lib/Basic/FileTypes.cpp b/lib/Basic/FileTypes.cpp index bae29a9f0da..66222299748 100644 --- a/lib/Basic/FileTypes.cpp +++ b/lib/Basic/FileTypes.cpp @@ -80,6 +80,7 @@ bool file_types::isTextual(ID Id) { case file_types::TY_ModuleTrace: case file_types::TY_OptRecord: case file_types::TY_SwiftModuleInterfaceFile: + case file_types::TY_SwiftOverlayFile: return true; case file_types::TY_Image: case file_types::TY_Object: @@ -90,6 +91,7 @@ bool file_types::isTextual(ID Id) { case file_types::TY_SwiftModuleFile: case file_types::TY_SwiftModuleDocFile: case file_types::TY_SwiftSourceInfoFile: + case file_types::TY_SwiftCrossImportDir: case file_types::TY_LLVM_BC: case file_types::TY_SerializedDiagnostics: case file_types::TY_ClangModuleFile: @@ -132,6 +134,8 @@ bool file_types::isAfterLLVM(ID Id) { case file_types::TY_SwiftModuleFile: case file_types::TY_SwiftModuleDocFile: case file_types::TY_SwiftSourceInfoFile: + case file_types::TY_SwiftCrossImportDir: + case file_types::TY_SwiftOverlayFile: case file_types::TY_SerializedDiagnostics: case file_types::TY_ClangModuleFile: case file_types::TY_SwiftDeps: @@ -176,6 +180,8 @@ bool file_types::isPartOfSwiftCompilation(ID Id) { case file_types::TY_SwiftModuleDocFile: case file_types::TY_SwiftModuleInterfaceFile: case file_types::TY_SwiftSourceInfoFile: + case file_types::TY_SwiftCrossImportDir: + case file_types::TY_SwiftOverlayFile: case file_types::TY_SerializedDiagnostics: case file_types::TY_ClangModuleFile: case file_types::TY_SwiftDeps: diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp index 2eb888a76be..99dda146e75 100644 --- a/lib/Driver/Driver.cpp +++ b/lib/Driver/Driver.cpp @@ -1942,6 +1942,8 @@ void Driver::buildActions(SmallVectorImpl &TopLevelActions, case file_types::TY_ModuleTrace: case file_types::TY_OptRecord: case file_types::TY_SwiftModuleInterfaceFile: + case file_types::TY_SwiftCrossImportDir: + case file_types::TY_SwiftOverlayFile: // We could in theory handle assembly or LLVM input, but let's not. // FIXME: What about LTO? Diags.diagnose(SourceLoc(), diag::error_unexpected_input_file, diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp index cf9f91bea10..4d72023af6d 100644 --- a/lib/Driver/ToolChains.cpp +++ b/lib/Driver/ToolChains.cpp @@ -562,6 +562,8 @@ const char *ToolChain::JobContext::computeFrontendModeForCompile() const { case file_types::TY_OptRecord: case file_types::TY_SwiftModuleInterfaceFile: case file_types::TY_SwiftSourceInfoFile: + case file_types::TY_SwiftCrossImportDir: + case file_types::TY_SwiftOverlayFile: llvm_unreachable("Output type can never be primary output."); case file_types::TY_INVALID: llvm_unreachable("Invalid type ID"); @@ -811,6 +813,8 @@ ToolChain::constructInvocation(const BackendJobAction &job, case file_types::TY_OptRecord: case file_types::TY_SwiftModuleInterfaceFile: case file_types::TY_SwiftSourceInfoFile: + case file_types::TY_SwiftCrossImportDir: + case file_types::TY_SwiftOverlayFile: llvm_unreachable("Output type can never be primary output."); case file_types::TY_INVALID: llvm_unreachable("Invalid type ID");