sema: diagnose importation from disallowed modules

This commit is contained in:
Xi Ge
2022-11-25 22:22:50 -08:00
parent 67bbab7e02
commit c3db946517
5 changed files with 54 additions and 0 deletions

View File

@@ -137,6 +137,7 @@ private:
void validateTestable(ModuleDecl *topLevelModule);
void validateResilience(NullablePtr<ModuleDecl> topLevelModule,
SourceFile &SF);
void validateAllowableClient(ModuleDecl *topLevelModule, SourceFile &SF);
/// Diagnoses an inability to import \p modulePath in this situation and, if
/// \p attrs is provided and has an \p attrKind, invalidates the attribute and
@@ -621,6 +622,7 @@ void UnboundImport::validateOptions(NullablePtr<ModuleDecl> topLevelModule,
// changing behavior, but it smells funny.
validateTestable(top);
validatePrivate(top);
validateAllowableClient(top, SF);
}
validateResilience(topLevelModule, SF);
@@ -712,6 +714,19 @@ void UnboundImport::validateTestable(ModuleDecl *topLevelModule) {
diagnoseInvalidAttr(DAK_Testable, ctx.Diags, diag::module_not_testable);
}
void UnboundImport::validateAllowableClient(ModuleDecl *importee,
SourceFile &SF) {
assert(importee);
auto *importer = SF.getParentModule();
if (!importee->allowImportedBy(importer)) {
ASTContext &ctx = SF.getASTContext();
ctx.Diags.diagnose(import.module.getModulePath().front().Loc,
diag::module_allowable_client_violation,
importee->getName(),
importer->getName());
}
}
void UnboundImport::validateResilience(NullablePtr<ModuleDecl> topLevelModule,
SourceFile &SF) {
if (import.options.contains(ImportFlags::ImplementationOnly))