Skip to content
Snippets Groups Projects
Commit 8ce754cf authored by Ben Langmuir's avatar Ben Langmuir
Browse files

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.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@204368 91177308-0d34-0410-b5e6-96231b3b80d8
parent e896106a
No related branches found
No related tags found
No related merge requests found
......@@ -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);
}
......
// 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}}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment