Merge pull request #61011 from xymus/spi-only-exportability

[Sema] Check exportability of @_spiOnly imported decls
This commit is contained in:
Alexis Laferrière
2022-09-09 11:56:24 -07:00
committed by GitHub
11 changed files with 380 additions and 13 deletions

View File

@@ -2529,21 +2529,25 @@ RestrictedImportKind SourceFile::getRestrictedImportKind(const ModuleDecl *modul
auto &imports = getASTContext().getImportCache();
RestrictedImportKind importKind = RestrictedImportKind::Implicit;
// Workaround for the cases where the bridging header isn't properly
// imported implicitly.
if (module->getName().str() == CLANG_HEADER_MODULE_NAME)
return RestrictedImportKind::None;
// Look at the imports of this source file.
for (auto &desc : *Imports) {
// Ignore implementation-only imports.
if (desc.options.contains(ImportFlags::ImplementationOnly)) {
if (imports.isImportedBy(module, desc.module.importedModule))
if (importKind < RestrictedImportKind::ImplementationOnly &&
imports.isImportedBy(module, desc.module.importedModule))
importKind = RestrictedImportKind::ImplementationOnly;
continue;
}
// If the module is imported publicly, it's not imported
// implementation-only.
if (imports.isImportedBy(module, desc.module.importedModule))
else if (desc.options.contains(ImportFlags::SPIOnly)) {
if (importKind < RestrictedImportKind::SPIOnly &&
imports.isImportedBy(module, desc.module.importedModule))
importKind = RestrictedImportKind::SPIOnly;
}
// If the module is imported publicly, there's no restriction.
else if (imports.isImportedBy(module, desc.module.importedModule))
return RestrictedImportKind::None;
}