Skip to content

Commit e0275f4

Browse files
committed
[Explicit Module Builds] Do not attempt to re-load module dependency from
interface for index. An explicit module build compile is unable to do so because it does not have access to the interfaces. Doing this in the first place is a workaround for a known bug, which will require to be solved at the root cause instead (e.g. Deserialization Safety feature). Resolves rdar://113165898
1 parent 5ba4ce5 commit e0275f4

File tree

4 files changed

+26
-11
lines changed

4 files changed

+26
-11
lines changed

include/swift/Index/IndexRecord.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ bool indexAndRecord(SourceFile *primarySourceFile, StringRef indexUnitToken,
5757
StringRef indexStorePath, bool indexClangModules,
5858
bool indexSystemModules, bool skipStdlib,
5959
bool includeLocals, bool isDebugCompilation,
60-
StringRef targetTriple,
60+
bool isExplicitModuleBuild, StringRef targetTriple,
6161
const DependencyTracker &dependencyTracker,
6262
const PathRemapper &pathRemapper);
6363

@@ -99,7 +99,8 @@ bool indexAndRecord(ModuleDecl *module, ArrayRef<std::string> indexUnitTokens,
9999
StringRef moduleUnitToken, StringRef indexStorePath,
100100
bool indexClangModules, bool indexSystemModules,
101101
bool skipStdlib, bool includeLocals,
102-
bool isDebugCompilation, StringRef targetTriple,
102+
bool isDebugCompilation, bool isExplicitModuleBuild,
103+
StringRef targetTriple,
103104
const DependencyTracker &dependencyTracker,
104105
const PathRemapper &pathRemapper);
105106
// FIXME: indexUnitTokens could be StringRef, but that creates an impedance

lib/FrontendTool/FrontendTool.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1911,6 +1911,7 @@ static void emitIndexDataForSourceFile(SourceFile *PrimarySourceFile,
19111911
opts.IndexIgnoreStdlib,
19121912
opts.IndexIncludeLocals,
19131913
isDebugCompilation,
1914+
opts.DisableImplicitModules,
19141915
Invocation.getTargetTriple(),
19151916
*Instance.getDependencyTracker(),
19161917
Invocation.getIRGenOptions().FilePrefixMap);
@@ -1929,6 +1930,7 @@ static void emitIndexDataForSourceFile(SourceFile *PrimarySourceFile,
19291930
opts.IndexIgnoreStdlib,
19301931
opts.IndexIncludeLocals,
19311932
isDebugCompilation,
1933+
opts.DisableImplicitModules,
19321934
Invocation.getTargetTriple(),
19331935
*Instance.getDependencyTracker(),
19341936
Invocation.getIRGenOptions().FilePrefixMap);

lib/Index/IndexRecord.cpp

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,7 @@ emitDataForSwiftSerializedModule(ModuleDecl *module,
395395
bool indexSystemModules,
396396
bool skipStdlib,
397397
bool includeLocals,
398+
bool explicitModulebuild,
398399
StringRef targetTriple,
399400
const clang::CompilerInstance &clangCI,
400401
DiagnosticEngine &diags,
@@ -598,6 +599,7 @@ static void addModuleDependencies(ArrayRef<ImportedModule> imports,
598599
bool indexSystemModules,
599600
bool skipStdlib,
600601
bool includeLocals,
602+
bool explicitModuleBuild,
601603
StringRef targetTriple,
602604
const clang::CompilerInstance &clangCI,
603605
DiagnosticEngine &diags,
@@ -674,7 +676,9 @@ static void addModuleDependencies(ArrayRef<ImportedModule> imports,
674676
emitDataForSwiftSerializedModule(mod, indexStorePath,
675677
indexClangModules,
676678
indexSystemModules, skipStdlib,
677-
includeLocals, targetTriple,
679+
includeLocals,
680+
explicitModuleBuild,
681+
targetTriple,
678682
clangCI, diags,
679683
unitWriter,
680684
pathRemapper,
@@ -719,6 +723,7 @@ emitDataForSwiftSerializedModule(ModuleDecl *module,
719723
bool indexSystemModules,
720724
bool skipStdlib,
721725
bool includeLocals,
726+
bool explicitModuleBuild,
722727
StringRef targetTriple,
723728
const clang::CompilerInstance &clangCI,
724729
DiagnosticEngine &diags,
@@ -747,7 +752,9 @@ emitDataForSwiftSerializedModule(ModuleDecl *module,
747752
// Reload resilient modules from swiftinterface to avoid indexing
748753
// internal details.
749754
bool skipIndexingModule = false;
750-
if (module->getResilienceStrategy() == ResilienceStrategy::Resilient &&
755+
// Note, we are unable to reload from interface on an explicit module build
756+
if (!explicitModuleBuild &&
757+
module->getResilienceStrategy() == ResilienceStrategy::Resilient &&
751758
!module->isBuiltFromInterface() &&
752759
!module->isStdlibModule()) {
753760
module->getASTContext().setIgnoreAdjacentModules(true);
@@ -867,6 +874,7 @@ emitDataForSwiftSerializedModule(ModuleDecl *module,
867874
StringScratchSpace moduleNameScratch;
868875
addModuleDependencies(imports, indexStorePath, indexClangModules,
869876
indexSystemModules, skipStdlib, includeLocals,
877+
explicitModuleBuild,
870878
targetTriple, clangCI, diags, unitWriter,
871879
moduleNameScratch, pathRemapper, initialFile);
872880

@@ -883,7 +891,7 @@ recordSourceFileUnit(SourceFile *primarySourceFile, StringRef indexUnitToken,
883891
StringRef indexStorePath, bool indexClangModules,
884892
bool indexSystemModules, bool skipStdlib,
885893
bool includeLocals, bool isDebugCompilation,
886-
StringRef targetTriple,
894+
bool isExplicitModuleBuild, StringRef targetTriple,
887895
ArrayRef<const clang::FileEntry *> fileDependencies,
888896
const clang::CompilerInstance &clangCI,
889897
const PathRemapper &pathRemapper,
@@ -909,8 +917,9 @@ recordSourceFileUnit(SourceFile *primarySourceFile, StringRef indexUnitToken,
909917
StringScratchSpace moduleNameScratch;
910918
addModuleDependencies(imports, indexStorePath, indexClangModules,
911919
indexSystemModules, skipStdlib, includeLocals,
912-
targetTriple, clangCI, diags, unitWriter,
913-
moduleNameScratch, pathRemapper, primarySourceFile);
920+
isExplicitModuleBuild, targetTriple, clangCI, diags,
921+
unitWriter, moduleNameScratch, pathRemapper,
922+
primarySourceFile);
914923

915924
// File dependencies.
916925
for (auto *F : fileDependencies)
@@ -965,6 +974,7 @@ bool index::indexAndRecord(SourceFile *primarySourceFile,
965974
bool skipStdlib,
966975
bool includeLocals,
967976
bool isDebugCompilation,
977+
bool isExplicitModuleBuild,
968978
StringRef targetTriple,
969979
const DependencyTracker &dependencyTracker,
970980
const PathRemapper &pathRemapper) {
@@ -994,8 +1004,8 @@ bool index::indexAndRecord(SourceFile *primarySourceFile,
9941004
return recordSourceFileUnit(primarySourceFile, indexUnitToken,
9951005
indexStorePath, indexClangModules,
9961006
indexSystemModules, skipStdlib, includeLocals,
997-
isDebugCompilation, targetTriple,
998-
fileDependencies.getArrayRef(),
1007+
isDebugCompilation, isExplicitModuleBuild,
1008+
targetTriple, fileDependencies.getArrayRef(),
9991009
clangCI, pathRemapper, diags);
10001010
}
10011011

@@ -1008,6 +1018,7 @@ bool index::indexAndRecord(ModuleDecl *module,
10081018
bool skipStdlib,
10091019
bool includeLocals,
10101020
bool isDebugCompilation,
1021+
bool isExplicitModuleBuild,
10111022
StringRef targetTriple,
10121023
const DependencyTracker &dependencyTracker,
10131024
const PathRemapper &pathRemapper) {
@@ -1045,8 +1056,8 @@ bool index::indexAndRecord(ModuleDecl *module,
10451056
if (recordSourceFileUnit(SF, indexUnitTokens[unitIndex],
10461057
indexStorePath, indexClangModules,
10471058
indexSystemModules, skipStdlib, includeLocals,
1048-
isDebugCompilation, targetTriple,
1049-
fileDependencies.getArrayRef(),
1059+
isDebugCompilation, isExplicitModuleBuild,
1060+
targetTriple, fileDependencies.getArrayRef(),
10501061
clangCI, pathRemapper, diags))
10511062
return true;
10521063
unitIndex += 1;

tools/SourceKit/lib/SwiftLang/SwiftIndexing.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,7 @@ static void emitIndexDataForSourceFile(SourceFile &PrimarySourceFile,
395395
Opts.IndexIgnoreStdlib,
396396
Opts.IndexIncludeLocals,
397397
isDebugCompilation,
398+
Opts.DisableImplicitModules,
398399
Invocation.getTargetTriple(),
399400
*Instance.getDependencyTracker(),
400401
Invocation.getIRGenOptions().FilePrefixMap);

0 commit comments

Comments
 (0)