summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2015-09-16 00:55:50 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2015-09-16 00:55:50 +0000
commit938d701fad8a051645f5fb1785b3802cdd0167a6 (patch)
treec4c627214550bd43cb847957f848fa167262d3aa /clang/lib
parent4947b21cb924bc8872a04dfe74ddf1645070492b (diff)
downloadbcm5719-llvm-938d701fad8a051645f5fb1785b3802cdd0167a6.tar.gz
bcm5719-llvm-938d701fad8a051645f5fb1785b3802cdd0167a6.zip
[modules] Fix a corner case in the macro override rules: properly handle overridden leaf module macros.
llvm-svn: 247765
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Lex/PPMacroExpansion.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/clang/lib/Lex/PPMacroExpansion.cpp b/clang/lib/Lex/PPMacroExpansion.cpp
index 594365b45e1..ba49437a060 100644
--- a/clang/lib/Lex/PPMacroExpansion.cpp
+++ b/clang/lib/Lex/PPMacroExpansion.cpp
@@ -145,8 +145,12 @@ void Preprocessor::updateModuleMacroInfo(const IdentifierInfo *II,
NumHiddenOverrides[O] = -1;
// Collect all macros that are not overridden by a visible macro.
- llvm::SmallVector<ModuleMacro *, 16> Worklist(Leaf->second.begin(),
- Leaf->second.end());
+ llvm::SmallVector<ModuleMacro *, 16> Worklist;
+ for (auto *LeafMM : Leaf->second) {
+ assert(LeafMM->getNumOverridingMacros() == 0 && "leaf macro overridden");
+ if (NumHiddenOverrides.lookup(LeafMM) == 0)
+ Worklist.push_back(LeafMM);
+ }
while (!Worklist.empty()) {
auto *MM = Worklist.pop_back_val();
if (CurSubmoduleState->VisibleModules.isVisible(MM->getOwningModule())) {
OpenPOWER on IntegriCloud