Merge remote-tracking branch 'origin/master' into master-rebranch

This commit is contained in:
swift-ci
2019-09-24 20:43:47 -07:00
28 changed files with 239 additions and 39 deletions

View File

@@ -310,9 +310,13 @@ function(_compile_swift_files
set(module_base "${module_dir}/${SWIFTFILE_MODULE_NAME}")
if(SWIFTFILE_SDK IN_LIST SWIFT_APPLE_PLATFORMS)
set(specific_module_dir "${module_base}.swiftmodule")
set(specific_module_private_dir "${specific_module_dir}/Private")
set(source_info_file "${specific_module_private_dir}/${SWIFTFILE_ARCHITECTURE}.swiftsourceinfo")
set(module_base "${module_base}.swiftmodule/${SWIFTFILE_ARCHITECTURE}")
else()
set(specific_module_dir)
set(specific_module_private_dir)
set(source_info_file "${module_base}.swiftsourceinfo")
endif()
set(module_file "${module_base}.swiftmodule")
set(module_doc_file "${module_base}.swiftdoc")
@@ -322,6 +326,8 @@ function(_compile_swift_files
set(sib_file "${module_base}.Onone.sib")
set(sibopt_file "${module_base}.O.sib")
set(sibgen_file "${module_base}.sibgen")
list(APPEND swift_module_flags
"-emit-module-source-info-path" "${source_info_file}")
if(SWIFT_ENABLE_MODULE_INTERFACES)
set(interface_file "${module_base}.swiftinterface")
@@ -349,7 +355,8 @@ function(_compile_swift_files
swift_install_in_component(DIRECTORY "${specific_module_dir}"
DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/swift/${library_subdir}"
COMPONENT "${SWIFTFILE_INSTALL_IN_COMPONENT}"
OPTIONAL)
OPTIONAL
PATTERN "Private" EXCLUDE)
else()
swift_install_in_component(FILES ${module_outputs}
DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/swift/${library_subdir}"
@@ -490,6 +497,7 @@ function(_compile_swift_files
COMMAND
"${CMAKE_COMMAND}" "-E" "make_directory" ${module_dir}
${specific_module_dir}
${specific_module_private_dir}
COMMAND
"${PYTHON_EXECUTABLE}" "${line_directive_tool}" "@${file_path}" --
"${swift_compiler_tool}" "-emit-module" "-o" "${module_file}"

View File

@@ -124,6 +124,8 @@ ERROR(error_mode_cannot_emit_module,none,
"this mode does not support emitting modules", ())
ERROR(error_mode_cannot_emit_module_doc,none,
"this mode does not support emitting module documentation files", ())
ERROR(error_mode_cannot_emit_module_source_info,none,
"this mode does not support emitting module source info files", ())
ERROR(error_mode_cannot_emit_interface,none,
"this mode does not support emitting module interface files", ())

View File

@@ -50,6 +50,7 @@ TYPE("autolink", AutolinkFile, "autolink", "")
TYPE("swiftmodule", SwiftModuleFile, "swiftmodule", "")
TYPE("swiftdoc", SwiftModuleDocFile, "swiftdoc", "")
TYPE("swiftinterface", SwiftModuleInterfaceFile, "swiftinterface", "")
TYPE("swiftsourceinfo", SwiftSourceInfoFile, "swiftsourceinfo", "")
TYPE("assembly", Assembly, "s", "")
TYPE("raw-sil", RawSIL, "sil", "")
TYPE("raw-sib", RawSIB, "sib", "")

View File

@@ -41,6 +41,15 @@ struct SupplementaryOutputPaths {
/// \sa swift::serialize
std::string ModuleOutputPath;
/// The path to which we should emit a module source information file.
/// It is valid whenever there are any inputs.
///
/// This binary format stores source locations and other information about the
/// declarations in a module.
///
/// \sa swift::serialize
std::string ModuleSourceInfoOutputPath;
/// The path to which we should emit a module documentation file.
/// It is valid whenever there are any inputs.
///
@@ -132,7 +141,8 @@ struct SupplementaryOutputPaths {
ModuleDocOutputPath.empty() && DependenciesFilePath.empty() &&
ReferenceDependenciesFilePath.empty() &&
SerializedDiagnosticsPath.empty() && LoadedModuleTracePath.empty() &&
TBDPath.empty() && ModuleInterfaceOutputPath.empty();
TBDPath.empty() && ModuleInterfaceOutputPath.empty() &&
ModuleSourceInfoOutputPath.empty();
}
};
} // namespace swift

View File

@@ -354,6 +354,11 @@ private:
StringRef workingDirectory,
CommandOutput *Output) const;
void chooseSwiftSourceInfoOutputPath(Compilation &C,
const TypeToPathMap *OutputMap,
StringRef workingDirectory,
CommandOutput *Output) const;
void chooseModuleInterfacePath(Compilation &C, const JobAction *JA,
StringRef workingDirectory,
llvm::SmallString<128> &buffer,

View File

@@ -235,6 +235,7 @@ public:
bool hasLoadedModuleTracePath() const;
bool hasModuleOutputPath() const;
bool hasModuleDocOutputPath() const;
bool hasModuleSourceInfoOutputPath() const;
bool hasModuleInterfaceOutputPath() const;
bool hasTBDPath() const;

View File

@@ -38,6 +38,9 @@ def emit_module_doc_path
: Separate<["-"], "emit-module-doc-path">, MetaVarName<"<path>">,
HelpText<"Output module documentation file <path>">;
def emit_module_source_info : Flag<["-"], "emit-module-source-info">,
HelpText<"Output module source info file">;
def merge_modules
: Flag<["-"], "merge-modules">, ModeOpt,
HelpText<"Merge the input modules without otherwise processing them">;

View File

@@ -364,6 +364,12 @@ def emit_module_interface_path :
ArgumentIsPath]>,
MetaVarName<"<path>">, HelpText<"Output module interface file to <path>">;
def emit_module_source_info_path :
Separate<["-"], "emit-module-source-info-path">,
Flags<[FrontendOption, NoInteractiveOption, DoesNotAffectIncrementalBuild,
ArgumentIsPath]>,
MetaVarName<"<path>">, HelpText<"Output module source info file to <path>">;
def emit_parseable_module_interface :
Flag<["-"], "emit-parseable-module-interface">,
Alias<emit_module_interface>,

View File

@@ -29,6 +29,7 @@ namespace swift {
const char *OutputPath = nullptr;
const char *DocOutputPath = nullptr;
const char *SourceInfoOutputPath = nullptr;
StringRef GroupInfoPath;
StringRef ImportedHeader;

View File

@@ -282,6 +282,7 @@ namespace swift {
const SerializationOptions &opts,
std::unique_ptr<llvm::MemoryBuffer> *moduleBuffer,
std::unique_ptr<llvm::MemoryBuffer> *moduleDocBuffer,
std::unique_ptr<llvm::MemoryBuffer> *moduleSourceInfoBuffer,
const SILModule *M = nullptr);
/// Get the CPU, subtarget feature options, and triple to use when emitting code.

View File

@@ -89,6 +89,7 @@ bool file_types::isTextual(ID Id) {
case file_types::TY_RawSIB:
case file_types::TY_SwiftModuleFile:
case file_types::TY_SwiftModuleDocFile:
case file_types::TY_SwiftSourceInfoFile:
case file_types::TY_LLVM_BC:
case file_types::TY_SerializedDiagnostics:
case file_types::TY_ClangModuleFile:
@@ -128,6 +129,7 @@ bool file_types::isAfterLLVM(ID Id) {
case file_types::TY_RawSIB:
case file_types::TY_SwiftModuleFile:
case file_types::TY_SwiftModuleDocFile:
case file_types::TY_SwiftSourceInfoFile:
case file_types::TY_SerializedDiagnostics:
case file_types::TY_ClangModuleFile:
case file_types::TY_SwiftDeps:
@@ -169,6 +171,7 @@ bool file_types::isPartOfSwiftCompilation(ID Id) {
case file_types::TY_SwiftModuleFile:
case file_types::TY_SwiftModuleDocFile:
case file_types::TY_SwiftModuleInterfaceFile:
case file_types::TY_SwiftSourceInfoFile:
case file_types::TY_SerializedDiagnostics:
case file_types::TY_ClangModuleFile:
case file_types::TY_SwiftDeps:

View File

@@ -1782,6 +1782,7 @@ void Driver::buildActions(SmallVectorImpl<const Action *> &TopLevelActions,
}
case file_types::TY_SwiftModuleFile:
case file_types::TY_SwiftModuleDocFile:
case file_types::TY_SwiftSourceInfoFile:
if (OI.ShouldGenerateModule && !OI.shouldLink()) {
// When generating a .swiftmodule as a top-level output (as opposed
// to, for example, linking an image), treat .swiftmodule files as
@@ -2541,9 +2542,10 @@ Job *Driver::buildJobsForAction(Compilation &C, const JobAction *JA,
chooseSwiftModuleOutputPath(C, OutputMap, workingDirectory, Output.get());
if (OI.ShouldGenerateModule &&
(isa<CompileJobAction>(JA) || isa<MergeModuleJobAction>(JA)))
chooseSwiftModuleDocOutputPath(C, OutputMap, workingDirectory,
Output.get());
(isa<CompileJobAction>(JA) || isa<MergeModuleJobAction>(JA))) {
chooseSwiftModuleDocOutputPath(C, OutputMap, workingDirectory, Output.get());
chooseSwiftSourceInfoOutputPath(C, OutputMap, workingDirectory, Output.get());
}
if (C.getArgs().hasArg(options::OPT_emit_module_interface,
options::OPT_emit_module_interface_path))
@@ -2786,35 +2788,67 @@ void Driver::chooseSwiftModuleOutputPath(Compilation &C,
}
}
static void chooseModuleAuxiliaryOutputFilePath(Compilation &C,
const TypeToPathMap *OutputMap,
StringRef workingDirectory,
CommandOutput *Output,
file_types::ID fileID,
bool isPrivate,
Optional<options::ID> optId = llvm::None) {
if (hasExistingAdditionalOutput(*Output, fileID))
return;
// Honor driver option for this path if it's given
if (optId.hasValue()) {
if (const Arg *A = C.getArgs().getLastArg(*optId)) {
Output->setAdditionalOutputForType(fileID, StringRef(A->getValue()));
return;
}
}
StringRef OFMOutputPath;
if (OutputMap) {
auto iter = OutputMap->find(fileID);
if (iter != OutputMap->end())
OFMOutputPath = iter->second;
}
if (!OFMOutputPath.empty()) {
// Prefer a path from the OutputMap.
Output->setAdditionalOutputForType(fileID, OFMOutputPath);
} else if (Output->getPrimaryOutputType() != file_types::TY_Nothing) {
auto ModulePath = Output->getAnyOutputForType(file_types::TY_SwiftModuleFile);
bool isTempFile = C.isTemporaryFile(ModulePath);
auto ModuleName = llvm::sys::path::filename(ModulePath);
llvm::SmallString<128> Path(llvm::sys::path::parent_path(ModulePath));
if (isPrivate) {
llvm::sys::path::append(Path, "Private");
// If the build system has created a Private dir for us to include the file, use it.
if (!llvm::sys::fs::exists(Path)) {
llvm::sys::path::remove_filename(Path);
}
}
llvm::sys::path::append(Path, ModuleName);
llvm::sys::path::replace_extension(Path, file_types::getExtension(fileID));
Output->setAdditionalOutputForType(fileID, Path);
if (isTempFile)
C.addTemporaryFile(Path);
}
}
void Driver::chooseSwiftSourceInfoOutputPath(Compilation &C,
const TypeToPathMap *OutputMap,
StringRef workingDirectory,
CommandOutput *Output) const {
chooseModuleAuxiliaryOutputFilePath(C, OutputMap, workingDirectory, Output,
file_types::TY_SwiftSourceInfoFile,
/*isPrivate*/true, options::OPT_emit_module_source_info_path);
}
void Driver::chooseSwiftModuleDocOutputPath(Compilation &C,
const TypeToPathMap *OutputMap,
StringRef workingDirectory,
CommandOutput *Output) const {
if (hasExistingAdditionalOutput(*Output, file_types::TY_SwiftModuleDocFile))
return;
StringRef OFMModuleDocOutputPath;
if (OutputMap) {
auto iter = OutputMap->find(file_types::TY_SwiftModuleDocFile);
if (iter != OutputMap->end())
OFMModuleDocOutputPath = iter->second;
}
if (!OFMModuleDocOutputPath.empty()) {
// Prefer a path from the OutputMap.
Output->setAdditionalOutputForType(file_types::TY_SwiftModuleDocFile,
OFMModuleDocOutputPath);
} else if (Output->getPrimaryOutputType() != file_types::TY_Nothing) {
// Otherwise, put it next to the swiftmodule file.
llvm::SmallString<128> Path(
Output->getAnyOutputForType(file_types::TY_SwiftModuleFile));
bool isTempFile = C.isTemporaryFile(Path);
llvm::sys::path::replace_extension(
Path, file_types::getExtension(file_types::TY_SwiftModuleDocFile));
Output->setAdditionalOutputForType(file_types::TY_SwiftModuleDocFile, Path);
if (isTempFile)
C.addTemporaryFile(Path);
}
chooseModuleAuxiliaryOutputFilePath(C, OutputMap, workingDirectory, Output,
file_types::TY_SwiftModuleDocFile, /*isPrivate*/false);
}
void Driver::chooseRemappingOutputPath(Compilation &C,

View File

@@ -531,6 +531,7 @@ const char *ToolChain::JobContext::computeFrontendModeForCompile() const {
case file_types::TY_TBD:
case file_types::TY_OptRecord:
case file_types::TY_SwiftModuleInterfaceFile:
case file_types::TY_SwiftSourceInfoFile:
llvm_unreachable("Output type can never be primary output.");
case file_types::TY_INVALID:
llvm_unreachable("Invalid type ID");
@@ -639,6 +640,9 @@ void ToolChain::JobContext::addFrontendSupplementaryOutputArguments(
addOutputsOfType(arguments, Output, Args, file_types::TY_SwiftModuleDocFile,
"-emit-module-doc-path");
addOutputsOfType(arguments, Output, Args, file_types::TY_SwiftSourceInfoFile,
"-emit-module-source-info-path");
addOutputsOfType(arguments, Output, Args,
file_types::ID::TY_SwiftModuleInterfaceFile,
"-emit-module-interface-path");
@@ -770,6 +774,7 @@ ToolChain::constructInvocation(const BackendJobAction &job,
case file_types::TY_ModuleTrace:
case file_types::TY_OptRecord:
case file_types::TY_SwiftModuleInterfaceFile:
case file_types::TY_SwiftSourceInfoFile:
llvm_unreachable("Output type can never be primary output.");
case file_types::TY_INVALID:
llvm_unreachable("Invalid type ID");
@@ -907,6 +912,9 @@ ToolChain::constructInvocation(const MergeModuleJobAction &job,
addOutputsOfType(Arguments, context.Output, context.Args,
file_types::TY_SwiftModuleDocFile, "-emit-module-doc-path");
addOutputsOfType(Arguments, context.Output, context.Args,
file_types::TY_SwiftSourceInfoFile,
"-emit-module-source-info-path");
addOutputsOfType(Arguments, context.Output, context.Args,
file_types::ID::TY_SwiftModuleInterfaceFile,
"-emit-module-interface-path");

View File

@@ -535,6 +535,12 @@ bool ArgsToFrontendOptionsConverter::checkUnusedSupplementaryOutputPaths()
Diags.diagnose(SourceLoc(), diag::error_mode_cannot_emit_module_doc);
return true;
}
// If we cannot emit module doc, we cannot emit source information file either.
if (!FrontendOptions::canActionEmitModuleDoc(Opts.RequestedAction) &&
Opts.InputsAndOutputs.hasModuleSourceInfoOutputPath()) {
Diags.diagnose(SourceLoc(), diag::error_mode_cannot_emit_module_source_info);
return true;
}
if (!FrontendOptions::canActionEmitInterface(Opts.RequestedAction) &&
Opts.InputsAndOutputs.hasModuleInterfaceOutputPath()) {
Diags.diagnose(SourceLoc(), diag::error_mode_cannot_emit_interface);

View File

@@ -296,11 +296,13 @@ SupplementaryOutputPathsComputer::getSupplementaryOutputPathsFromArguments()
auto TBD = getSupplementaryFilenamesFromArguments(options::OPT_emit_tbd_path);
auto moduleInterfaceOutput = getSupplementaryFilenamesFromArguments(
options::OPT_emit_module_interface_path);
auto moduleSourceInfoOutput = getSupplementaryFilenamesFromArguments(
options::OPT_emit_module_source_info_path);
if (!objCHeaderOutput || !moduleOutput || !moduleDocOutput ||
!dependenciesFile || !referenceDependenciesFile ||
!serializedDiagnostics || !fixItsOutput || !loadedModuleTrace || !TBD ||
!moduleInterfaceOutput) {
!moduleInterfaceOutput || !moduleSourceInfoOutput) {
return None;
}
std::vector<SupplementaryOutputPaths> result;
@@ -319,7 +321,7 @@ SupplementaryOutputPathsComputer::getSupplementaryOutputPathsFromArguments()
sop.LoadedModuleTracePath = (*loadedModuleTrace)[i];
sop.TBDPath = (*TBD)[i];
sop.ModuleInterfaceOutputPath = (*moduleInterfaceOutput)[i];
sop.ModuleSourceInfoOutputPath = (*moduleSourceInfoOutput)[i];
result.push_back(sop);
}
return result;
@@ -394,6 +396,11 @@ SupplementaryOutputPathsComputer::computeOutputPathsForOneInput(
file_types::TY_SwiftModuleDocFile, "",
defaultSupplementaryOutputPathExcludingExtension);
auto moduleSourceInfoOutputPath = determineSupplementaryOutputFilename(
OPT_emit_module_source_info, pathsFromArguments.ModuleSourceInfoOutputPath,
file_types::TY_SwiftSourceInfoFile, "",
defaultSupplementaryOutputPathExcludingExtension);
// There is no non-path form of -emit-interface-path
auto ModuleInterfaceOutputPath =
pathsFromArguments.ModuleInterfaceOutputPath;
@@ -420,6 +427,7 @@ SupplementaryOutputPathsComputer::computeOutputPathsForOneInput(
sop.LoadedModuleTracePath = loadedModuleTracePath;
sop.TBDPath = tbdPath;
sop.ModuleInterfaceOutputPath = ModuleInterfaceOutputPath;
sop.ModuleSourceInfoOutputPath = moduleSourceInfoOutputPath;
return sop;
}
@@ -489,6 +497,7 @@ createFromTypeToPathMap(const TypeToPathMap *map) {
{file_types::TY_ObjCHeader, paths.ObjCHeaderOutputPath},
{file_types::TY_SwiftModuleFile, paths.ModuleOutputPath},
{file_types::TY_SwiftModuleDocFile, paths.ModuleDocOutputPath},
{file_types::TY_SwiftSourceInfoFile, paths.ModuleSourceInfoOutputPath},
{file_types::TY_Dependencies, paths.DependenciesFilePath},
{file_types::TY_SwiftDeps, paths.ReferenceDependenciesFilePath},
{file_types::TY_SerializedDiagnostics, paths.SerializedDiagnosticsPath},
@@ -516,6 +525,7 @@ SupplementaryOutputPathsComputer::readSupplementaryOutputFileMap() const {
options::OPT_serialize_diagnostics_path,
options::OPT_emit_loaded_module_trace_path,
options::OPT_emit_module_interface_path,
options::OPT_emit_module_source_info_path,
options::OPT_emit_tbd_path)) {
Diags.diagnose(SourceLoc(),
diag::error_cannot_have_supplementary_outputs,

View File

@@ -129,6 +129,7 @@ SerializationOptions CompilerInvocation::computeSerializationOptions(
SerializationOptions serializationOpts;
serializationOpts.OutputPath = outs.ModuleOutputPath.c_str();
serializationOpts.DocOutputPath = outs.ModuleDocOutputPath.c_str();
serializationOpts.SourceInfoOutputPath = outs.ModuleSourceInfoOutputPath.c_str();
serializationOpts.GroupInfoPath = opts.GroupInfoPath.c_str();
if (opts.SerializeBridgingHeader && !outs.ModuleOutputPath.empty())
serializationOpts.ImportedHeader = opts.ImplicitObjCHeaderPath;

View File

@@ -435,6 +435,12 @@ bool FrontendInputsAndOutputs::hasModuleDocOutputPath() const {
return outs.ModuleDocOutputPath;
});
}
bool FrontendInputsAndOutputs::hasModuleSourceInfoOutputPath() const {
return hasSupplementaryOutputPath(
[](const SupplementaryOutputPaths &outs) -> const std::string & {
return outs.ModuleSourceInfoOutputPath;
});
}
bool FrontendInputsAndOutputs::hasModuleInterfaceOutputPath() const {
return hasSupplementaryOutputPath(
[](const SupplementaryOutputPaths &outs) -> const std::string & {

View File

@@ -127,7 +127,8 @@ void FrontendOptions::forAllOutputPaths(
const std::string *outputs[] = {&outs.ModuleOutputPath,
&outs.ModuleDocOutputPath,
&outs.ModuleInterfaceOutputPath,
&outs.ObjCHeaderOutputPath};
&outs.ObjCHeaderOutputPath,
&outs.ModuleSourceInfoOutputPath};
for (const std::string *next : outputs) {
if (!next->empty())
fn(*next);

View File

@@ -366,7 +366,9 @@ bool ModuleInterfaceBuilder::buildSwiftModule(
// We don't want to serialize module docs in the cache -- they
// will be serialized beside the interface file.
serializeToBuffers(Mod, SerializationOpts, ModuleBuffer,
/*ModuleDocBuffer*/nullptr, SILMod.get());
/*ModuleDocBuffer*/nullptr,
/*SourceInfoBuffer*/nullptr,
SILMod.get());
});
LLVM_DEBUG(llvm::dbgs() << "Running SIL processing passes\n");

View File

@@ -4738,6 +4738,7 @@ void swift::serializeToBuffers(
ModuleOrSourceFile DC, const SerializationOptions &options,
std::unique_ptr<llvm::MemoryBuffer> *moduleBuffer,
std::unique_ptr<llvm::MemoryBuffer> *moduleDocBuffer,
std::unique_ptr<llvm::MemoryBuffer> *moduleSourceInfoBuffer,
const SILModule *M) {
assert(!StringRef::withNullAsEmpty(options.OutputPath).empty());
@@ -4774,6 +4775,22 @@ void swift::serializeToBuffers(
*moduleDocBuffer = llvm::make_unique<llvm::SmallVectorMemoryBuffer>(
std::move(buf), options.DocOutputPath);
}
if (!StringRef::withNullAsEmpty(options.SourceInfoOutputPath).empty()) {
SharedTimer timer("Serialization, swiftsourceinfo, to buffer");
llvm::SmallString<1024> buf;
llvm::raw_svector_ostream stream(buf);
writeSourceInfoToStream(stream, DC);
(void)withOutputFile(getContext(DC).Diags,
options.SourceInfoOutputPath,
[&](raw_ostream &out) {
out << stream.str();
return false;
});
if (moduleSourceInfoBuffer)
*moduleSourceInfoBuffer = llvm::make_unique<llvm::SmallVectorMemoryBuffer>(
std::move(buf), options.SourceInfoOutputPath);
}
}
void swift::serialize(ModuleOrSourceFile DC,
@@ -4807,4 +4824,14 @@ void swift::serialize(ModuleOrSourceFile DC,
return false;
});
}
if (!StringRef::withNullAsEmpty(options.SourceInfoOutputPath).empty()) {
(void)withOutputFile(getContext(DC).Diags,
options.SourceInfoOutputPath,
[&](raw_ostream &out) {
SharedTimer timer("Serialization, swiftsourceinfo");
writeSourceInfoToStream(out, DC);
return false;
});
}
}

View File

@@ -486,6 +486,9 @@ public:
/// Serialize module documentation to the given stream.
void writeDocToStream(raw_ostream &os, ModuleOrSourceFile DC,
StringRef GroupInfoPath);
/// Serialize module source info to the given stream.
void writeSourceInfoToStream(raw_ostream &os, ModuleOrSourceFile DC);
} // end namespace serialization
} // end namespace swift
#endif

View File

@@ -502,3 +502,7 @@ void serialization::writeDocToStream(raw_ostream &os, ModuleOrSourceFile DC,
S.writeToStream(os);
}
void serialization::writeSourceInfoToStream(raw_ostream &os, ModuleOrSourceFile DC) {
os << "Some stuff";
}

View File

@@ -19,9 +19,9 @@
// DUMPOFM-NEXT: {{.*}}/advanced_output_file_map.swift -> swiftdoc: "/build/swiftmodule/advanced_output_file_map_x.swiftdoc"
// DUMPOFM-NEXT: {{.*}}/advanced_output_file_map.swift -> diagnostics: "/build/dia/advanced_output_file_map.dia"
// BINDINGS: # "x86_64-apple-macosx10.9" - "swift{{c?(\.EXE)?}}", inputs: ["{{.*}}/advanced_output_file_map.swift"], output: {object: "/build/obj/advanced_output_file_map.o", dependencies: "/build/d/advanced_output_file_map.d", swiftmodule: "/build/swiftmodule/advanced_output_file_map.swiftmodule", swiftdoc: "/build/swiftmodule/advanced_output_file_map_x.swiftdoc", diagnostics: "/build/dia/advanced_output_file_map.dia"}
// BINDINGS: # "x86_64-apple-macosx10.9" - "swift{{c?(\.EXE)?}}", inputs: ["{{.*}}/Inputs/main.swift"], output: {object: "/build/obj/main.o", dependencies: "/build/d/main.d", swiftmodule: "/build/swiftmodule/main.swiftmodule", swiftdoc: "/build/swiftmodule/main_x.swiftdoc", diagnostics: "/build/dia/main.dia"}
// BINDINGS: # "x86_64-apple-macosx10.9" - "swift{{c?(\.EXE)?}}", inputs: ["{{.*}}/Inputs/lib.swift"], output: {object: "/build/obj/lib.o", dependencies: "/build/d/lib.d", swiftmodule: "/build/swiftmodule/lib.swiftmodule", swiftdoc: "/build/swiftmodule/lib_x.swiftdoc", diagnostics: "/build/dia/lib.dia"}
// BINDINGS: # "x86_64-apple-macosx10.9" - "swift{{c?(\.EXE)?}}", inputs: ["/build/obj/advanced_output_file_map.o", "/build/obj/main.o", "/build/obj/lib.o"], output: {swiftmodule: "/build/OutputFileMap.swiftmodule", swiftdoc: "/build/OutputFileMap.swiftdoc"}
// BINDINGS: # "x86_64-apple-macosx10.9" - "swift{{c?(\.EXE)?}}", inputs: ["{{.*}}/advanced_output_file_map.swift"], output: {object: "/build/obj/advanced_output_file_map.o", dependencies: "/build/d/advanced_output_file_map.d", swiftmodule: "/build/swiftmodule/advanced_output_file_map.swiftmodule", swiftdoc: "/build/swiftmodule/advanced_output_file_map_x.swiftdoc", swiftsourceinfo: "/build/swiftmodule/advanced_output_file_map.swiftsourceinfo", diagnostics: "/build/dia/advanced_output_file_map.dia"}
// BINDINGS: # "x86_64-apple-macosx10.9" - "swift{{c?(\.EXE)?}}", inputs: ["{{.*}}/Inputs/main.swift"], output: {object: "/build/obj/main.o", dependencies: "/build/d/main.d", swiftmodule: "/build/swiftmodule/main.swiftmodule", swiftdoc: "/build/swiftmodule/main_x.swiftdoc", swiftsourceinfo: "/build/swiftmodule/main.swiftsourceinfo", diagnostics: "/build/dia/main.dia"}
// BINDINGS: # "x86_64-apple-macosx10.9" - "swift{{c?(\.EXE)?}}", inputs: ["{{.*}}/Inputs/lib.swift"], output: {object: "/build/obj/lib.o", dependencies: "/build/d/lib.d", swiftmodule: "/build/swiftmodule/lib.swiftmodule", swiftdoc: "/build/swiftmodule/lib_x.swiftdoc", swiftsourceinfo: "/build/swiftmodule/lib.swiftsourceinfo", diagnostics: "/build/dia/lib.dia"}
// BINDINGS: # "x86_64-apple-macosx10.9" - "swift{{c?(\.EXE)?}}", inputs: ["/build/obj/advanced_output_file_map.o", "/build/obj/main.o", "/build/obj/lib.o"], output: {swiftmodule: "/build/OutputFileMap.swiftmodule", swiftdoc: "/build/OutputFileMap.swiftdoc", swiftsourceinfo: "/build/OutputFileMap.swiftsourceinfo"}
// BINDINGS: # "x86_64-apple-macosx10.9" - "ld{{(.exe)?}}", inputs: ["/build/obj/advanced_output_file_map.o", "/build/obj/main.o", "/build/obj/lib.o", "/build/OutputFileMap.swiftmodule"], output: {image: "/build/advanced_output_file_map.out"}
// BINDINGS: # "x86_64-apple-macosx10.9" - "dsymutil{{(\.exe)?}}", inputs: ["/build/advanced_output_file_map.out"], output: {dSYM: "/build/advanced_output_file_map.out.dSYM"}

View File

@@ -43,6 +43,10 @@
// CHECK-NEXT: {
// CHECK-NEXT: "type": "swiftdoc",
// CHECK-NEXT: "path": "{{.*[\\/]}}file-01-[[SWIFTDOC01]].swiftdoc"
// CHECK-NEXT: },
// CHECK-NEXT: {
// CHECK-NEXT: "type": "swiftsourceinfo",
// CHECK-NEXT: "path": "{{.*[\\/]}}file-01-[[MODULE01]].swiftsourceinfo"
// CHECK-NEXT: }
// CHECK-NEXT: ],
// CHECK-NEXT: "pid": -{{[1-9][0-9]*}},
@@ -88,6 +92,10 @@
// CHECK-NEXT: {
// CHECK-NEXT: "type": "swiftdoc",
// CHECK-NEXT: "path": "{{.*[\\/]}}file-02-[[SWIFTDOC02]].swiftdoc"
// CHECK-NEXT: },
// CHECK-NEXT: {
// CHECK-NEXT: "type": "swiftsourceinfo",
// CHECK-NEXT: "path": "{{.*[\\/]}}file-02-[[MODULE02]].swiftsourceinfo"
// CHECK-NEXT: }
// CHECK-NEXT: ],
// CHECK-NEXT: "pid": -{{[1-9][0-9]*}},
@@ -133,6 +141,10 @@
// CHECK-NEXT: {
// CHECK-NEXT: "type": "swiftdoc",
// CHECK-NEXT: "path": "{{.*[\\/]}}file-03-[[SWIFTDOC03]].swiftdoc"
// CHECK-NEXT: },
// CHECK-NEXT: {
// CHECK-NEXT: "type": "swiftsourceinfo",
// CHECK-NEXT: "path": "{{.*[\\/]}}file-03-[[MODULE03]].swiftsourceinfo"
// CHECK-NEXT: }
// CHECK-NEXT: ],
// CHECK-NEXT: "pid": -{{[1-9][0-9]*}},
@@ -178,6 +190,10 @@
// CHECK-NEXT: {
// CHECK-NEXT: "type": "swiftdoc",
// CHECK-NEXT: "path": "{{.*[\\/]}}main-[[SWIFTDOCMAIN]].swiftdoc"
// CHECK-NEXT: },
// CHECK-NEXT: {
// CHECK-NEXT: "type": "swiftsourceinfo",
// CHECK-NEXT: "path": "{{.*[\\/]}}main-[[MODULEMAIN]].swiftsourceinfo"
// CHECK-NEXT: }
// CHECK-NEXT: ],
// CHECK-NEXT: "pid": -{{[1-9][0-9]*}},
@@ -233,7 +249,7 @@
// CHECK-NEXT: {
// CHECK-NEXT: "kind": "began",
// CHECK-NEXT: "name": "merge-module",
// CHECK-NEXT: "command": "{{.*[\\/]}}swift{{c?(\.EXE)?(\\")?}} -frontend -merge-modules -emit-module {{.*[\\/]}}file-01-[[MODULE01]].swiftmodule{{(\\")?}} {{.*[\\/]}}file-02-[[MODULE02]].swiftmodule{{(\\")?}} {{.*[\\/]}}file-03-[[MODULE03]].swiftmodule{{(\\")?}} {{.*[\\/]}}main-[[MODULEMAIN]].swiftmodule{{(\\")?}} {{.*}} -emit-module-doc-path main.swiftdoc -module-name main -o main.swiftmodule",
// CHECK-NEXT: "command": "{{.*[\\/]}}swift{{c?(\.EXE)?(\\")?}} -frontend -merge-modules -emit-module {{.*[\\/]}}file-01-[[MODULE01]].swiftmodule{{(\\")?}} {{.*[\\/]}}file-02-[[MODULE02]].swiftmodule{{(\\")?}} {{.*[\\/]}}file-03-[[MODULE03]].swiftmodule{{(\\")?}} {{.*[\\/]}}main-[[MODULEMAIN]].swiftmodule{{(\\")?}} {{.*}} -emit-module-doc-path main.swiftdoc -emit-module-source-info-path main.swiftsourceinfo -module-name main -o main.swiftmodule",
// CHECK-NEXT: "command_executable": "{{.*[\\/]}}swift{{c?(\.EXE)?}}",
// CHECK-NEXT: "command_arguments": [
// CHECK-NEXT: "-frontend",
@@ -245,6 +261,8 @@
// CHECK-NEXT: "{{.*[\\/]}}main-[[MODULEMAIN]].swiftmodule",
// CHECK: "-emit-module-doc-path",
// CHECK-NEXT: "main.swiftdoc",
// CHECK: "-emit-module-source-info-path",
// CHECK-NEXT: "main.swiftsourceinfo",
// CHECK-NEXT: "-module-name",
// CHECK-NEXT: "main",
// CHECK-NEXT: "-o",
@@ -264,6 +282,10 @@
// CHECK-NEXT: {
// CHECK-NEXT: "type": "swiftdoc",
// CHECK-NEXT: "path": "main.swiftdoc"
// CHECK-NEXT: },
// CHECK-NEXT: {
// CHECK-NEXT: "type": "swiftsourceinfo",
// CHECK-NEXT: "path": "main.swiftsourceinfo"
// CHECK-NEXT: }
// CHECK-NEXT: ],
// CHECK-NEXT: "pid": {{[1-9][0-9]*}},

View File

@@ -8,14 +8,17 @@
// CHECK: Handled a.swift
// CHECK-NEXT: Supplementary swiftdoc: "./a.swiftdoc"
// CHECK-NEXT: Supplementary swiftmodule: "./a.swiftmodule"
// CHECK-NEXT: Supplementary swiftsourceinfo: "./a.swiftsourceinfo"
// CHECK-NEXT: Supplementary "./a.swift":
// CHECK-NEXT: Handled b.swift
// CHECK-NEXT: Supplementary swiftdoc: "./b.swiftdoc"
// CHECK-NEXT: Supplementary swiftmodule: "./b.swiftmodule"
// CHECK-NEXT: Supplementary swiftsourceinfo: "./b.swiftsourceinfo"
// CHECK-NEXT: Supplementary "./b.swift":
// CHECK-NEXT: Handled c.swift
// CHECK-NEXT: Supplementary swiftdoc: "./c.swiftdoc"
// CHECK-NEXT: Supplementary swiftmodule: "./c.swiftmodule"
// CHECK-NEXT: Supplementary swiftsourceinfo: "./c.swiftsourceinfo"
// CHECK-NEXT: Supplementary "./c.swift":
// CHECK-NEXT: Handled modules
// CHECK-NOT: Handled

View File

@@ -37,6 +37,10 @@
// CHECK-NEXT: "path": "{{.*[\\/]}}parseable_output-[[OUTPUT]].swiftdoc"
// CHECK-NEXT: },
// CHECK-NEXT: {
// CHECK-NEXT: "type": "swiftsourceinfo",
// CHECK-NEXT: "path": "{{.*[\\/]}}parseable_output-[[OUTPUT]].swiftsourceinfo"
// CHECK-NEXT: },
// CHECK-NEXT: {
// CHECK-NEXT: "type": "diagnostics",
// CHECK-NEXT: "path": "{{.*[\\/]}}parseable_output-[[OUTPUT]].dia"
// CHECK-NEXT: }
@@ -86,6 +90,10 @@
// CHECK-NEXT: "path": "{{.*[\\/]}}parseable_output.swift.tmp.swiftdoc"
// CHECK-NEXT: },
// CHECK-NEXT: {
// CHECK-NEXT: "type": "swiftsourceinfo",
// CHECK-NEXT: "path": "{{.*[\\/]}}parseable_output.swift.tmp.swiftsourceinfo"
// CHECK-NEXT: },
// CHECK-NEXT: {
// CHECK-NEXT: "type": "objc-header",
// CHECK-NEXT: "path": "{{.*[\\/]}}parseable_output.swift.tmp.h"
// CHECK-NEXT: }

View File

@@ -39,6 +39,10 @@
// CHECK-NEXT: "path": "{{.*[\\/]}}-[[OUTPUT]].swiftdoc"
// CHECK-NEXT: },
// CHECK-NEXT: {
// CHECK-NEXT: "type": "swiftsourceinfo",
// CHECK-NEXT: "path": "{{.*[\\/]}}-[[OUTPUT]].swiftsourceinfo"
// CHECK-NEXT: },
// CHECK-NEXT: {
// CHECK-NEXT: "type": "diagnostics",
// CHECK-NEXT: "path": "{{.*[\\/]}}-[[OUTPUT]].dia"
// CHECK-NEXT: }
@@ -88,6 +92,10 @@
// CHECK-NEXT: "path": "{{.*[\\/]}}parseable_output_unicode.swift.tmp.swiftdoc"
// CHECK-NEXT: },
// CHECK-NEXT: {
// CHECK-NEXT: "type": "swiftsourceinfo",
// CHECK-NEXT: "path": "{{.*[\\/]}}parseable_output_unicode.swift.tmp.swiftsourceinfo"
// CHECK-NEXT: },
// CHECK-NEXT: {
// CHECK-NEXT: "type": "objc-header",
// CHECK-NEXT: "path": "{{.*[\\/]}}parseable_output_unicode.swift.tmp.h"
// CHECK-NEXT: }

View File

@@ -0,0 +1,16 @@
// RUN: %empty-directory(%t)
// RUN: mkdir -p %t/build/Private
// RUN: %swiftc_driver -driver-print-jobs -emit-module %s -emit-module-path %t/build/sourceinfo_file.swiftmodule -module-name sourceinfo_file | %FileCheck %s -check-prefix CHECK-PRIVATE
// CHECK-PRIVATE: build/Private/sourceinfo_file.swiftsourceinfo
// RUN: %empty-directory(%t/build)
// RUN: %swiftc_driver -driver-print-jobs -emit-module %s -emit-module-path %t/build/sourceinfo_file.swiftmodule -module-name sourceinfo_file | %FileCheck %s -check-prefix CHECK-NOPRIVATE
// CHECK-NOPRIVATE-NOT: Private/sourceinfo_file.swiftsourceinfo
// CHECK-NOPRIVATE: build/sourceinfo_file.swiftsourceinfo
// RUN: %empty-directory(%t/build)
// RUN: %swiftc_driver -driver-print-jobs -emit-module %s -emit-module-path %t/build/sourceinfo_file.swiftmodule -module-name sourceinfo_file -emit-module-source-info-path %t/build/DriverPath.swiftsourceinfo | %FileCheck %s -check-prefix CHECK-DRIVER-OPT
// CHECK-DRIVER-OPT: build/DriverPath.swiftsourceinfo