[ASTPrinter] Fix printing inconsistent implementation-only imported in experimental mode

Make sure we print imports that are sometimes normal and sometimes
implemntation-only in the experimental SPI import mode.

rdar://89620638
This commit is contained in:
Alexis Laferrière
2022-03-01 08:02:15 -08:00
parent 9cc5d12a1d
commit c22cf03530
3 changed files with 22 additions and 5 deletions

View File

@@ -197,12 +197,22 @@ static void printImports(raw_ostream &out,
// imports and filter them later.
llvm::SmallSet<ImportedModule, 4, ImportedModule::Order> ioiImportSet;
if (Opts.PrintSPIs && Opts.ExperimentalSPIImports) {
allImportFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
SmallVector<ImportedModule, 4> ioiImport;
M->getImportedModules(ioiImport,
SmallVector<ImportedModule, 4> ioiImports, allImports;
M->getImportedModules(ioiImports,
ModuleDecl::ImportFilterKind::ImplementationOnly);
ioiImportSet.insert(ioiImport.begin(), ioiImport.end());
// Only consider modules imported consistently as implementation-only.
M->getImportedModules(allImports,
allImportFilter);
llvm::SmallSet<ImportedModule, 8, ImportedModule::Order> allImportSet;
allImportSet.insert(allImports.begin(), allImports.end());
for (auto import: ioiImports)
if (allImportSet.count(import) == 0)
ioiImportSet.insert(import);
allImportFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
}
SmallVector<ImportedModule, 8> allImports;