Fix a hole with nested unavailable submodules from r206664
If a module doesn't meet a requirement, neither do its submodules. If we don't propogate that, we might think it's an error to be missing a header in one of those submodules. llvm-svn: 206673
This commit is contained in:
parent
4bc13f6b47
commit
993055f860
|
@ -413,7 +413,7 @@ public:
|
|||
const TargetInfo &Target);
|
||||
|
||||
/// \brief Mark this module and all of its submodules as unavailable.
|
||||
void markUnavailable();
|
||||
void markUnavailable(bool MissingRequirement = false);
|
||||
|
||||
/// \brief Find the submodule with the given name.
|
||||
///
|
||||
|
|
|
@ -39,6 +39,7 @@ Module::Module(StringRef Name, SourceLocation DefinitionLoc, Module *Parent,
|
|||
IsSystem = true;
|
||||
if (Parent->IsExternC)
|
||||
IsExternC = true;
|
||||
IsMissingRequirement = Parent->IsMissingRequirement;
|
||||
|
||||
Parent->SubModuleIndex[Name] = Parent->SubModules.size();
|
||||
Parent->SubModules.push_back(this);
|
||||
|
@ -160,11 +161,10 @@ void Module::addRequirement(StringRef Feature, bool RequiredState,
|
|||
if (hasFeature(Feature, LangOpts, Target) == RequiredState)
|
||||
return;
|
||||
|
||||
IsMissingRequirement = true;
|
||||
markUnavailable();
|
||||
markUnavailable(/*MissingRequirement*/true);
|
||||
}
|
||||
|
||||
void Module::markUnavailable() {
|
||||
void Module::markUnavailable(bool MissingRequirement) {
|
||||
if (!IsAvailable)
|
||||
return;
|
||||
|
||||
|
@ -178,6 +178,7 @@ void Module::markUnavailable() {
|
|||
continue;
|
||||
|
||||
Current->IsAvailable = false;
|
||||
Current->IsMissingRequirement |= MissingRequirement;
|
||||
for (submodule_iterator Sub = Current->submodule_begin(),
|
||||
SubEnd = Current->submodule_end();
|
||||
Sub != SubEnd; ++Sub) {
|
||||
|
|
|
@ -20,6 +20,7 @@ module missing_unavailable_headers {
|
|||
module missing {
|
||||
requires !objc
|
||||
header "missing.h"
|
||||
module also_missing { header "also_missing.h" }
|
||||
}
|
||||
module not_missing { }
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue