diff options
| author | Richard Smith <richard-llvm@metafoo.co.uk> | 2015-09-16 00:55:50 +0000 |
|---|---|---|
| committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2015-09-16 00:55:50 +0000 |
| commit | 938d701fad8a051645f5fb1785b3802cdd0167a6 (patch) | |
| tree | c4c627214550bd43cb847957f848fa167262d3aa /clang/lib | |
| parent | 4947b21cb924bc8872a04dfe74ddf1645070492b (diff) | |
| download | bcm5719-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.cpp | 8 |
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())) { |

