diff --git a/clang/lib/Lex/ModuleMap.cpp b/clang/lib/Lex/ModuleMap.cpp --- a/clang/lib/Lex/ModuleMap.cpp +++ b/clang/lib/Lex/ModuleMap.cpp @@ -930,27 +930,13 @@ /// For a framework module, infer the framework against which we /// should link. -static void inferFrameworkLink(Module *Mod, const DirectoryEntry *FrameworkDir, - FileManager &FileMgr) { +static void inferFrameworkLink(Module *Mod) { assert(Mod->IsFramework && "Can only infer linking for framework modules"); assert(!Mod->isSubFramework() && "Can only infer linking for top-level frameworks"); - SmallString<128> LibName; - LibName += FrameworkDir->getName(); - llvm::sys::path::append(LibName, Mod->Name); - - // The library name of a framework has more than one possible extension since - // the introduction of the text-based dynamic library format. We need to check - // for both before we give up. - for (const char *extension : {"", ".tbd"}) { - llvm::sys::path::replace_extension(LibName, extension); - if (FileMgr.getFile(LibName)) { - Mod->LinkLibraries.push_back(Module::LinkLibrary(Mod->Name, - /*IsFramework=*/true)); - return; - } - } + Mod->LinkLibraries.push_back(Module::LinkLibrary(Mod->Name, + /*IsFramework=*/true)); } Module *ModuleMap::inferFrameworkModule(const DirectoryEntry *FrameworkDir, @@ -1129,9 +1115,8 @@ // If the module is a top-level framework, automatically link against the // framework. - if (!Result->isSubFramework()) { - inferFrameworkLink(Result, FrameworkDir, FileMgr); - } + if (!Result->isSubFramework()) + inferFrameworkLink(Result); return Result; } @@ -2185,9 +2170,8 @@ // If the active module is a top-level framework, and there are no link // libraries, automatically link against the framework. if (ActiveModule->IsFramework && !ActiveModule->isSubFramework() && - ActiveModule->LinkLibraries.empty()) { - inferFrameworkLink(ActiveModule, Directory, SourceMgr.getFileManager()); - } + ActiveModule->LinkLibraries.empty()) + inferFrameworkLink(ActiveModule); // If the module meets all requirements but is still unavailable, mark the // whole tree as unavailable to prevent it from building. diff --git a/clang/test/Modules/use-exportas-for-link.m b/clang/test/Modules/use-exportas-for-link.m --- a/clang/test/Modules/use-exportas-for-link.m +++ b/clang/test/Modules/use-exportas-for-link.m @@ -31,15 +31,17 @@ #endif // RUN: %clang_cc1 -emit-llvm -o - -fmodules-cache-path=%t -DE -fmodules -fimplicit-module-maps -F %S/Inputs/exportas-link %s | FileCheck --check-prefix=CHECK_E %s -// CHECK_E: !llvm.linker.options = !{![[MODULE:[0-9]+]]} -// CHECK_E: ![[MODULE]] = !{!"-framework", !"SomeKitCore"} +// CHECK_E: !llvm.linker.options = !{![[MODULE1:[0-9]+]], ![[MODULE2:[0-9]+]]} +// CHECK_E: ![[MODULE1]] = !{!"-framework", !"OtherKit"} +// CHECK_E: ![[MODULE2]] = !{!"-framework", !"SomeKitCore"} #ifdef E @import OtherKit; #endif // RUN: %clang_cc1 -emit-llvm -o - -fmodules-cache-path=%t -DF -fmodules -fimplicit-module-maps -F %S/Inputs/exportas-link %s | FileCheck --check-prefix=CHECK_F %s -// CHECK_F: !llvm.linker.options = !{![[MODULE:[0-9]+]]} -// CHECK_F: ![[MODULE]] = !{!"-framework", !"SomeKit"} +// CHECK_F: !llvm.linker.options = !{![[MODULE1:[0-9]+]], ![[MODULE2:[0-9]+]]} +// CHECK_F: ![[MODULE1]] = !{!"-framework", !"OtherKit"} +// CHECK_F: ![[MODULE2]] = !{!"-framework", !"SomeKit"} #ifdef F @import OtherKit; #endif