Merge branch 'main' into elsh/pkg-sil-verify

This commit is contained in:
Ellie Shin
2024-04-18 13:34:29 -07:00
committed by GitHub
54 changed files with 1034 additions and 135 deletions

View File

@@ -395,7 +395,8 @@ std::error_code SerializedModuleLoaderBase::openModuleFile(
SerializedModuleLoaderBase::BinaryModuleImports
SerializedModuleLoaderBase::getImportsOfModule(
const ModuleFileSharedCore &loadedModuleFile,
ModuleLoadingBehavior transitiveBehavior, StringRef packageName) {
ModuleLoadingBehavior transitiveBehavior, StringRef packageName,
bool isTestableImport) {
llvm::StringSet<> importedModuleNames;
std::string importedHeader = "";
for (const auto &dependency : loadedModuleFile.getDependencies()) {
@@ -410,8 +411,7 @@ SerializedModuleLoaderBase::getImportsOfModule(
loadedModuleFile.getTransitiveLoadingBehavior(
dependency,
/*debuggerMode*/ false,
/*isPartialModule*/ false, packageName,
loadedModuleFile.isTestable());
/*isPartialModule*/ false, packageName, isTestableImport);
if (dependencyTransitiveBehavior > transitiveBehavior)
continue;
@@ -431,8 +431,7 @@ SerializedModuleLoaderBase::getImportsOfModule(
llvm::ErrorOr<ModuleDependencyInfo>
SerializedModuleLoaderBase::scanModuleFile(Twine modulePath, bool isFramework,
bool isTestableImport,
bool hasInterface) {
bool isTestableImport) {
const std::string moduleDocPath;
const std::string sourceInfoPath;
@@ -455,16 +454,6 @@ SerializedModuleLoaderBase::scanModuleFile(Twine modulePath, bool isFramework,
modulePath.str());
return std::make_error_code(std::errc::no_such_file_or_directory);
}
// If the module file has interface file and not testable imported, don't
// import the testable module because it contains more interfaces than
// needed and can pull in more dependencies.
if (loadedModuleFile->isTestable() && !isTestableImport && hasInterface) {
if (Ctx.LangOpts.EnableModuleLoadingRemarks)
Ctx.Diags.diagnose(SourceLoc(), diag::skip_module_testable,
modulePath.str());
return std::make_error_code(std::errc::no_such_file_or_directory);
}
}
// Some transitive dependencies of binary modules are not required to be
@@ -475,12 +464,12 @@ SerializedModuleLoaderBase::scanModuleFile(Twine modulePath, bool isFramework,
// optional.
auto binaryModuleImports =
getImportsOfModule(*loadedModuleFile, ModuleLoadingBehavior::Required,
Ctx.LangOpts.PackageName);
Ctx.LangOpts.PackageName, isTestableImport);
// Lookup optional imports of this module also
auto binaryModuleOptionalImports =
getImportsOfModule(*loadedModuleFile, ModuleLoadingBehavior::Optional,
Ctx.LangOpts.PackageName);
Ctx.LangOpts.PackageName, isTestableImport);
auto importedModuleSet = binaryModuleImports.moduleImports;
std::vector<std::string> importedModuleNames;