Skip to content

Commit adb0e6e

Browse files
authored
Merge pull request #27277 from nkcsgexi/add-source-info-to-driver
Frontend: set up output file .swiftsourceinfo
2 parents 88bc5b8 + 7013725 commit adb0e6e

28 files changed

+233
-33
lines changed

cmake/modules/SwiftSource.cmake

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,9 +310,13 @@ function(_compile_swift_files
310310
set(module_base "${module_dir}/${SWIFTFILE_MODULE_NAME}")
311311
if(SWIFTFILE_SDK IN_LIST SWIFT_APPLE_PLATFORMS)
312312
set(specific_module_dir "${module_base}.swiftmodule")
313+
set(specific_module_private_dir "${specific_module_dir}/Private")
314+
set(source_info_file "${specific_module_private_dir}/${SWIFTFILE_ARCHITECTURE}.swiftsourceinfo")
313315
set(module_base "${module_base}.swiftmodule/${SWIFTFILE_ARCHITECTURE}")
314316
else()
315317
set(specific_module_dir)
318+
set(specific_module_private_dir)
319+
set(source_info_file "${module_base}.swiftsourceinfo")
316320
endif()
317321
set(module_file "${module_base}.swiftmodule")
318322
set(module_doc_file "${module_base}.swiftdoc")
@@ -322,6 +326,8 @@ function(_compile_swift_files
322326
set(sib_file "${module_base}.Onone.sib")
323327
set(sibopt_file "${module_base}.O.sib")
324328
set(sibgen_file "${module_base}.sibgen")
329+
list(APPEND swift_module_flags
330+
"-emit-module-source-info-path" "${source_info_file}")
325331

326332
if(SWIFT_ENABLE_MODULE_INTERFACES)
327333
set(interface_file "${module_base}.swiftinterface")
@@ -349,7 +355,8 @@ function(_compile_swift_files
349355
swift_install_in_component(DIRECTORY "${specific_module_dir}"
350356
DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/swift/${library_subdir}"
351357
COMPONENT "${SWIFTFILE_INSTALL_IN_COMPONENT}"
352-
OPTIONAL)
358+
OPTIONAL
359+
PATTERN "Private" EXCLUDE)
353360
else()
354361
swift_install_in_component(FILES ${module_outputs}
355362
DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/swift/${library_subdir}"
@@ -490,6 +497,7 @@ function(_compile_swift_files
490497
COMMAND
491498
"${CMAKE_COMMAND}" "-E" "make_directory" ${module_dir}
492499
${specific_module_dir}
500+
${specific_module_private_dir}
493501
COMMAND
494502
"${PYTHON_EXECUTABLE}" "${line_directive_tool}" "@${file_path}" --
495503
"${swift_compiler_tool}" "-emit-module" "-o" "${module_file}"

include/swift/AST/DiagnosticsFrontend.def

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,8 @@ ERROR(error_mode_cannot_emit_module,none,
124124
"this mode does not support emitting modules", ())
125125
ERROR(error_mode_cannot_emit_module_doc,none,
126126
"this mode does not support emitting module documentation files", ())
127+
ERROR(error_mode_cannot_emit_module_source_info,none,
128+
"this mode does not support emitting module source info files", ())
127129
ERROR(error_mode_cannot_emit_interface,none,
128130
"this mode does not support emitting module interface files", ())
129131

include/swift/Basic/FileTypes.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ TYPE("autolink", AutolinkFile, "autolink", "")
5050
TYPE("swiftmodule", SwiftModuleFile, "swiftmodule", "")
5151
TYPE("swiftdoc", SwiftModuleDocFile, "swiftdoc", "")
5252
TYPE("swiftinterface", SwiftModuleInterfaceFile, "swiftinterface", "")
53+
TYPE("swiftsourceinfo", SwiftSourceInfoFile, "swiftsourceinfo", "")
5354
TYPE("assembly", Assembly, "s", "")
5455
TYPE("raw-sil", RawSIL, "sil", "")
5556
TYPE("raw-sib", RawSIB, "sib", "")

include/swift/Basic/SupplementaryOutputPaths.h

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,15 @@ struct SupplementaryOutputPaths {
4141
/// \sa swift::serialize
4242
std::string ModuleOutputPath;
4343

44+
/// The path to which we should emit a module source information file.
45+
/// It is valid whenever there are any inputs.
46+
///
47+
/// This binary format stores source locations and other information about the
48+
/// declarations in a module.
49+
///
50+
/// \sa swift::serialize
51+
std::string ModuleSourceInfoOutputPath;
52+
4453
/// The path to which we should emit a module documentation file.
4554
/// It is valid whenever there are any inputs.
4655
///
@@ -132,7 +141,8 @@ struct SupplementaryOutputPaths {
132141
ModuleDocOutputPath.empty() && DependenciesFilePath.empty() &&
133142
ReferenceDependenciesFilePath.empty() &&
134143
SerializedDiagnosticsPath.empty() && LoadedModuleTracePath.empty() &&
135-
TBDPath.empty() && ModuleInterfaceOutputPath.empty();
144+
TBDPath.empty() && ModuleInterfaceOutputPath.empty() &&
145+
ModuleSourceInfoOutputPath.empty();
136146
}
137147
};
138148
} // namespace swift

include/swift/Driver/Driver.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,11 @@ class Driver {
354354
StringRef workingDirectory,
355355
CommandOutput *Output) const;
356356

357+
void chooseSwiftSourceInfoOutputPath(Compilation &C,
358+
const TypeToPathMap *OutputMap,
359+
StringRef workingDirectory,
360+
CommandOutput *Output) const;
361+
357362
void chooseModuleInterfacePath(Compilation &C, const JobAction *JA,
358363
StringRef workingDirectory,
359364
llvm::SmallString<128> &buffer,

include/swift/Frontend/FrontendInputsAndOutputs.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,7 @@ class FrontendInputsAndOutputs {
235235
bool hasLoadedModuleTracePath() const;
236236
bool hasModuleOutputPath() const;
237237
bool hasModuleDocOutputPath() const;
238+
bool hasModuleSourceInfoOutputPath() const;
238239
bool hasModuleInterfaceOutputPath() const;
239240
bool hasTBDPath() const;
240241

include/swift/Option/FrontendOptions.td

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ def emit_module_doc_path
3838
: Separate<["-"], "emit-module-doc-path">, MetaVarName<"<path>">,
3939
HelpText<"Output module documentation file <path>">;
4040

41+
def emit_module_source_info : Flag<["-"], "emit-module-source-info">,
42+
HelpText<"Output module source info file">;
43+
4144
def merge_modules
4245
: Flag<["-"], "merge-modules">, ModeOpt,
4346
HelpText<"Merge the input modules without otherwise processing them">;

include/swift/Option/Options.td

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,12 @@ def emit_module_interface_path :
364364
ArgumentIsPath]>,
365365
MetaVarName<"<path>">, HelpText<"Output module interface file to <path>">;
366366

367+
def emit_module_source_info_path :
368+
Separate<["-"], "emit-module-source-info-path">,
369+
Flags<[FrontendOption, NoInteractiveOption, DoesNotAffectIncrementalBuild,
370+
ArgumentIsPath]>,
371+
MetaVarName<"<path>">, HelpText<"Output module source info file to <path>">;
372+
367373
def emit_parseable_module_interface :
368374
Flag<["-"], "emit-parseable-module-interface">,
369375
Alias<emit_module_interface>,

include/swift/Serialization/SerializationOptions.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ namespace swift {
2929

3030
const char *OutputPath = nullptr;
3131
const char *DocOutputPath = nullptr;
32+
const char *SourceInfoOutputPath = nullptr;
3233

3334
StringRef GroupInfoPath;
3435
StringRef ImportedHeader;

include/swift/Subsystems.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,7 @@ namespace swift {
282282
const SerializationOptions &opts,
283283
std::unique_ptr<llvm::MemoryBuffer> *moduleBuffer,
284284
std::unique_ptr<llvm::MemoryBuffer> *moduleDocBuffer,
285+
std::unique_ptr<llvm::MemoryBuffer> *moduleSourceInfoBuffer,
285286
const SILModule *M = nullptr);
286287

287288
/// Get the CPU, subtarget feature options, and triple to use when emitting code.

lib/Basic/FileTypes.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ bool file_types::isTextual(ID Id) {
8989
case file_types::TY_RawSIB:
9090
case file_types::TY_SwiftModuleFile:
9191
case file_types::TY_SwiftModuleDocFile:
92+
case file_types::TY_SwiftSourceInfoFile:
9293
case file_types::TY_LLVM_BC:
9394
case file_types::TY_SerializedDiagnostics:
9495
case file_types::TY_ClangModuleFile:
@@ -128,6 +129,7 @@ bool file_types::isAfterLLVM(ID Id) {
128129
case file_types::TY_RawSIB:
129130
case file_types::TY_SwiftModuleFile:
130131
case file_types::TY_SwiftModuleDocFile:
132+
case file_types::TY_SwiftSourceInfoFile:
131133
case file_types::TY_SerializedDiagnostics:
132134
case file_types::TY_ClangModuleFile:
133135
case file_types::TY_SwiftDeps:
@@ -169,6 +171,7 @@ bool file_types::isPartOfSwiftCompilation(ID Id) {
169171
case file_types::TY_SwiftModuleFile:
170172
case file_types::TY_SwiftModuleDocFile:
171173
case file_types::TY_SwiftModuleInterfaceFile:
174+
case file_types::TY_SwiftSourceInfoFile:
172175
case file_types::TY_SerializedDiagnostics:
173176
case file_types::TY_ClangModuleFile:
174177
case file_types::TY_SwiftDeps:

lib/Driver/Driver.cpp

Lines changed: 56 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1782,6 +1782,7 @@ void Driver::buildActions(SmallVectorImpl<const Action *> &TopLevelActions,
17821782
}
17831783
case file_types::TY_SwiftModuleFile:
17841784
case file_types::TY_SwiftModuleDocFile:
1785+
case file_types::TY_SwiftSourceInfoFile:
17851786
if (OI.ShouldGenerateModule && !OI.shouldLink()) {
17861787
// When generating a .swiftmodule as a top-level output (as opposed
17871788
// to, for example, linking an image), treat .swiftmodule files as
@@ -2541,9 +2542,10 @@ Job *Driver::buildJobsForAction(Compilation &C, const JobAction *JA,
25412542
chooseSwiftModuleOutputPath(C, OutputMap, workingDirectory, Output.get());
25422543

25432544
if (OI.ShouldGenerateModule &&
2544-
(isa<CompileJobAction>(JA) || isa<MergeModuleJobAction>(JA)))
2545-
chooseSwiftModuleDocOutputPath(C, OutputMap, workingDirectory,
2546-
Output.get());
2545+
(isa<CompileJobAction>(JA) || isa<MergeModuleJobAction>(JA))) {
2546+
chooseSwiftModuleDocOutputPath(C, OutputMap, workingDirectory, Output.get());
2547+
chooseSwiftSourceInfoOutputPath(C, OutputMap, workingDirectory, Output.get());
2548+
}
25472549

25482550
if (C.getArgs().hasArg(options::OPT_emit_module_interface,
25492551
options::OPT_emit_module_interface_path))
@@ -2786,37 +2788,69 @@ void Driver::chooseSwiftModuleOutputPath(Compilation &C,
27862788
}
27872789
}
27882790

2789-
void Driver::chooseSwiftModuleDocOutputPath(Compilation &C,
2790-
const TypeToPathMap *OutputMap,
2791-
StringRef workingDirectory,
2792-
CommandOutput *Output) const {
2793-
2794-
if (hasExistingAdditionalOutput(*Output, file_types::TY_SwiftModuleDocFile))
2791+
static void chooseModuleAuxiliaryOutputFilePath(Compilation &C,
2792+
const TypeToPathMap *OutputMap,
2793+
StringRef workingDirectory,
2794+
CommandOutput *Output,
2795+
file_types::ID fileID,
2796+
bool isPrivate,
2797+
Optional<options::ID> optId = llvm::None) {
2798+
if (hasExistingAdditionalOutput(*Output, fileID))
27952799
return;
2800+
// Honor driver option for this path if it's given
2801+
if (optId.hasValue()) {
2802+
if (const Arg *A = C.getArgs().getLastArg(*optId)) {
2803+
Output->setAdditionalOutputForType(fileID, StringRef(A->getValue()));
2804+
return;
2805+
}
2806+
}
27962807

2797-
StringRef OFMModuleDocOutputPath;
2808+
StringRef OFMOutputPath;
27982809
if (OutputMap) {
2799-
auto iter = OutputMap->find(file_types::TY_SwiftModuleDocFile);
2810+
auto iter = OutputMap->find(fileID);
28002811
if (iter != OutputMap->end())
2801-
OFMModuleDocOutputPath = iter->second;
2812+
OFMOutputPath = iter->second;
28022813
}
2803-
if (!OFMModuleDocOutputPath.empty()) {
2814+
if (!OFMOutputPath.empty()) {
28042815
// Prefer a path from the OutputMap.
2805-
Output->setAdditionalOutputForType(file_types::TY_SwiftModuleDocFile,
2806-
OFMModuleDocOutputPath);
2816+
Output->setAdditionalOutputForType(fileID, OFMOutputPath);
28072817
} else if (Output->getPrimaryOutputType() != file_types::TY_Nothing) {
2808-
// Otherwise, put it next to the swiftmodule file.
2809-
llvm::SmallString<128> Path(
2810-
Output->getAnyOutputForType(file_types::TY_SwiftModuleFile));
2811-
bool isTempFile = C.isTemporaryFile(Path);
2812-
llvm::sys::path::replace_extension(
2813-
Path, file_types::getExtension(file_types::TY_SwiftModuleDocFile));
2814-
Output->setAdditionalOutputForType(file_types::TY_SwiftModuleDocFile, Path);
2818+
auto ModulePath = Output->getAnyOutputForType(file_types::TY_SwiftModuleFile);
2819+
bool isTempFile = C.isTemporaryFile(ModulePath);
2820+
auto ModuleName = llvm::sys::path::filename(ModulePath);
2821+
llvm::SmallString<128> Path(llvm::sys::path::parent_path(ModulePath));
2822+
if (isPrivate) {
2823+
llvm::sys::path::append(Path, "Private");
2824+
// If the build system has created a Private dir for us to include the file, use it.
2825+
if (!llvm::sys::fs::exists(Path)) {
2826+
llvm::sys::path::remove_filename(Path);
2827+
}
2828+
}
2829+
llvm::sys::path::append(Path, ModuleName);
2830+
llvm::sys::path::replace_extension(Path, file_types::getExtension(fileID));
2831+
Output->setAdditionalOutputForType(fileID, Path);
28152832
if (isTempFile)
28162833
C.addTemporaryFile(Path);
28172834
}
28182835
}
28192836

2837+
void Driver::chooseSwiftSourceInfoOutputPath(Compilation &C,
2838+
const TypeToPathMap *OutputMap,
2839+
StringRef workingDirectory,
2840+
CommandOutput *Output) const {
2841+
chooseModuleAuxiliaryOutputFilePath(C, OutputMap, workingDirectory, Output,
2842+
file_types::TY_SwiftSourceInfoFile,
2843+
/*isPrivate*/true, options::OPT_emit_module_source_info_path);
2844+
}
2845+
2846+
void Driver::chooseSwiftModuleDocOutputPath(Compilation &C,
2847+
const TypeToPathMap *OutputMap,
2848+
StringRef workingDirectory,
2849+
CommandOutput *Output) const {
2850+
chooseModuleAuxiliaryOutputFilePath(C, OutputMap, workingDirectory, Output,
2851+
file_types::TY_SwiftModuleDocFile, /*isPrivate*/false);
2852+
}
2853+
28202854
void Driver::chooseRemappingOutputPath(Compilation &C,
28212855
const TypeToPathMap *OutputMap,
28222856
CommandOutput *Output) const {

lib/Driver/ToolChains.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -531,6 +531,7 @@ const char *ToolChain::JobContext::computeFrontendModeForCompile() const {
531531
case file_types::TY_TBD:
532532
case file_types::TY_OptRecord:
533533
case file_types::TY_SwiftModuleInterfaceFile:
534+
case file_types::TY_SwiftSourceInfoFile:
534535
llvm_unreachable("Output type can never be primary output.");
535536
case file_types::TY_INVALID:
536537
llvm_unreachable("Invalid type ID");
@@ -639,6 +640,9 @@ void ToolChain::JobContext::addFrontendSupplementaryOutputArguments(
639640
addOutputsOfType(arguments, Output, Args, file_types::TY_SwiftModuleDocFile,
640641
"-emit-module-doc-path");
641642

643+
addOutputsOfType(arguments, Output, Args, file_types::TY_SwiftSourceInfoFile,
644+
"-emit-module-source-info-path");
645+
642646
addOutputsOfType(arguments, Output, Args,
643647
file_types::ID::TY_SwiftModuleInterfaceFile,
644648
"-emit-module-interface-path");
@@ -770,6 +774,7 @@ ToolChain::constructInvocation(const BackendJobAction &job,
770774
case file_types::TY_ModuleTrace:
771775
case file_types::TY_OptRecord:
772776
case file_types::TY_SwiftModuleInterfaceFile:
777+
case file_types::TY_SwiftSourceInfoFile:
773778
llvm_unreachable("Output type can never be primary output.");
774779
case file_types::TY_INVALID:
775780
llvm_unreachable("Invalid type ID");
@@ -907,6 +912,9 @@ ToolChain::constructInvocation(const MergeModuleJobAction &job,
907912

908913
addOutputsOfType(Arguments, context.Output, context.Args,
909914
file_types::TY_SwiftModuleDocFile, "-emit-module-doc-path");
915+
addOutputsOfType(Arguments, context.Output, context.Args,
916+
file_types::TY_SwiftSourceInfoFile,
917+
"-emit-module-source-info-path");
910918
addOutputsOfType(Arguments, context.Output, context.Args,
911919
file_types::ID::TY_SwiftModuleInterfaceFile,
912920
"-emit-module-interface-path");

lib/Frontend/ArgsToFrontendOptionsConverter.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -535,6 +535,12 @@ bool ArgsToFrontendOptionsConverter::checkUnusedSupplementaryOutputPaths()
535535
Diags.diagnose(SourceLoc(), diag::error_mode_cannot_emit_module_doc);
536536
return true;
537537
}
538+
// If we cannot emit module doc, we cannot emit source information file either.
539+
if (!FrontendOptions::canActionEmitModuleDoc(Opts.RequestedAction) &&
540+
Opts.InputsAndOutputs.hasModuleSourceInfoOutputPath()) {
541+
Diags.diagnose(SourceLoc(), diag::error_mode_cannot_emit_module_source_info);
542+
return true;
543+
}
538544
if (!FrontendOptions::canActionEmitInterface(Opts.RequestedAction) &&
539545
Opts.InputsAndOutputs.hasModuleInterfaceOutputPath()) {
540546
Diags.diagnose(SourceLoc(), diag::error_mode_cannot_emit_interface);

lib/Frontend/ArgsToFrontendOutputsConverter.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -296,11 +296,13 @@ SupplementaryOutputPathsComputer::getSupplementaryOutputPathsFromArguments()
296296
auto TBD = getSupplementaryFilenamesFromArguments(options::OPT_emit_tbd_path);
297297
auto moduleInterfaceOutput = getSupplementaryFilenamesFromArguments(
298298
options::OPT_emit_module_interface_path);
299+
auto moduleSourceInfoOutput = getSupplementaryFilenamesFromArguments(
300+
options::OPT_emit_module_source_info_path);
299301

300302
if (!objCHeaderOutput || !moduleOutput || !moduleDocOutput ||
301303
!dependenciesFile || !referenceDependenciesFile ||
302304
!serializedDiagnostics || !fixItsOutput || !loadedModuleTrace || !TBD ||
303-
!moduleInterfaceOutput) {
305+
!moduleInterfaceOutput || !moduleSourceInfoOutput) {
304306
return None;
305307
}
306308
std::vector<SupplementaryOutputPaths> result;
@@ -319,7 +321,7 @@ SupplementaryOutputPathsComputer::getSupplementaryOutputPathsFromArguments()
319321
sop.LoadedModuleTracePath = (*loadedModuleTrace)[i];
320322
sop.TBDPath = (*TBD)[i];
321323
sop.ModuleInterfaceOutputPath = (*moduleInterfaceOutput)[i];
322-
324+
sop.ModuleSourceInfoOutputPath = (*moduleSourceInfoOutput)[i];
323325
result.push_back(sop);
324326
}
325327
return result;
@@ -394,6 +396,11 @@ SupplementaryOutputPathsComputer::computeOutputPathsForOneInput(
394396
file_types::TY_SwiftModuleDocFile, "",
395397
defaultSupplementaryOutputPathExcludingExtension);
396398

399+
auto moduleSourceInfoOutputPath = determineSupplementaryOutputFilename(
400+
OPT_emit_module_source_info, pathsFromArguments.ModuleSourceInfoOutputPath,
401+
file_types::TY_SwiftSourceInfoFile, "",
402+
defaultSupplementaryOutputPathExcludingExtension);
403+
397404
// There is no non-path form of -emit-interface-path
398405
auto ModuleInterfaceOutputPath =
399406
pathsFromArguments.ModuleInterfaceOutputPath;
@@ -420,6 +427,7 @@ SupplementaryOutputPathsComputer::computeOutputPathsForOneInput(
420427
sop.LoadedModuleTracePath = loadedModuleTracePath;
421428
sop.TBDPath = tbdPath;
422429
sop.ModuleInterfaceOutputPath = ModuleInterfaceOutputPath;
430+
sop.ModuleSourceInfoOutputPath = moduleSourceInfoOutputPath;
423431
return sop;
424432
}
425433

@@ -489,6 +497,7 @@ createFromTypeToPathMap(const TypeToPathMap *map) {
489497
{file_types::TY_ObjCHeader, paths.ObjCHeaderOutputPath},
490498
{file_types::TY_SwiftModuleFile, paths.ModuleOutputPath},
491499
{file_types::TY_SwiftModuleDocFile, paths.ModuleDocOutputPath},
500+
{file_types::TY_SwiftSourceInfoFile, paths.ModuleSourceInfoOutputPath},
492501
{file_types::TY_Dependencies, paths.DependenciesFilePath},
493502
{file_types::TY_SwiftDeps, paths.ReferenceDependenciesFilePath},
494503
{file_types::TY_SerializedDiagnostics, paths.SerializedDiagnosticsPath},
@@ -516,6 +525,7 @@ SupplementaryOutputPathsComputer::readSupplementaryOutputFileMap() const {
516525
options::OPT_serialize_diagnostics_path,
517526
options::OPT_emit_loaded_module_trace_path,
518527
options::OPT_emit_module_interface_path,
528+
options::OPT_emit_module_source_info_path,
519529
options::OPT_emit_tbd_path)) {
520530
Diags.diagnose(SourceLoc(),
521531
diag::error_cannot_have_supplementary_outputs,

lib/Frontend/Frontend.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ SerializationOptions CompilerInvocation::computeSerializationOptions(
129129
SerializationOptions serializationOpts;
130130
serializationOpts.OutputPath = outs.ModuleOutputPath.c_str();
131131
serializationOpts.DocOutputPath = outs.ModuleDocOutputPath.c_str();
132+
serializationOpts.SourceInfoOutputPath = outs.ModuleSourceInfoOutputPath.c_str();
132133
serializationOpts.GroupInfoPath = opts.GroupInfoPath.c_str();
133134
if (opts.SerializeBridgingHeader && !outs.ModuleOutputPath.empty())
134135
serializationOpts.ImportedHeader = opts.ImplicitObjCHeaderPath;

0 commit comments

Comments
 (0)