forked from OSchip/llvm-project
Prevent lookup of subframework modules by name without parent framework
We were 'allowing' the following import @import Sub; where Sub is a subframework of Foo and we had a -F path inside Foo.framework/Frameworks and no module map file for Sub. This would later hit assertion failures in debug builds. Now we should correctly diagnose this as a module not found error. llvm-svn: 204368
This commit is contained in:
parent
e6c97e01a5
commit
c3ea5654f9
|
@ -1223,30 +1223,9 @@ Module *HeaderSearch::loadFrameworkModule(StringRef Name,
|
|||
return ModMap.findModule(Name);
|
||||
}
|
||||
|
||||
// Figure out the top-level framework directory and the submodule path from
|
||||
// that top-level framework to the requested framework.
|
||||
SmallVector<std::string, 2> SubmodulePath;
|
||||
SubmodulePath.push_back(Name);
|
||||
const DirectoryEntry *TopFrameworkDir
|
||||
= ::getTopFrameworkDir(FileMgr, Dir->getName(), SubmodulePath);
|
||||
|
||||
|
||||
// Try to infer a module map from the top-level framework directory.
|
||||
Module *Result = ModMap.inferFrameworkModule(SubmodulePath.back(),
|
||||
TopFrameworkDir,
|
||||
IsSystem,
|
||||
/*Parent=*/0);
|
||||
if (!Result)
|
||||
return 0;
|
||||
|
||||
// Follow the submodule path to find the requested (sub)framework module
|
||||
// within the top-level framework module.
|
||||
SubmodulePath.pop_back();
|
||||
while (!SubmodulePath.empty() && Result) {
|
||||
Result = ModMap.lookupModuleQualified(SubmodulePath.back(), Result);
|
||||
SubmodulePath.pop_back();
|
||||
}
|
||||
return Result;
|
||||
// Try to infer a module map from the framework directory.
|
||||
return ModMap.inferFrameworkModule(Name, Dir, IsSystem, /*Parent=*/0);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
// RUN: rm -rf %t
|
||||
// RUN: %clang_cc1 -fmodules-cache-path=%t -fmodules -F %S/Inputs -F %S/Inputs/DependsOnModule.framework/Frameworks %s -verify
|
||||
|
||||
@import DependsOnModule;
|
||||
@import SubFramework; // expected-error{{module 'SubFramework' not found}}
|
Loading…
Reference in New Issue