diff options
| author | Douglas Gregor <dgregor@apple.com> | 2012-09-24 19:56:18 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2012-09-24 19:56:18 +0000 |
| commit | e769d862eecef2e1935798cb9828f62b0407431a (patch) | |
| tree | 5b95fc36afaff89cba46543b8022ccd61d21bf50 /clang/lib/Serialization/ASTReader.cpp | |
| parent | 3cb355d11f6092dc3fe0d911556f56197d7b19d7 (diff) | |
| download | bcm5719-llvm-e769d862eecef2e1935798cb9828f62b0407431a.tar.gz bcm5719-llvm-e769d862eecef2e1935798cb9828f62b0407431a.zip | |
Make sure that we don't end up making an #undef'd macro visible after
the fact. Test cases will come when we're actually (de-)serializing
macro history.
llvm-svn: 164549
Diffstat (limited to 'clang/lib/Serialization/ASTReader.cpp')
| -rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index 9fe6ef317e1..6de0c65ba30 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -2552,9 +2552,15 @@ void ASTReader::makeNamesVisible(const HiddenNames &Names) { else { IdentifierInfo *II = Names[I].get<IdentifierInfo *>(); if (!II->hasMacroDefinition()) { - II->setHasMacroDefinition(true); - if (DeserializationListener) - DeserializationListener->MacroVisible(II); + // Make sure that this macro hasn't been #undef'd in the mean-time. + llvm::DenseMap<IdentifierInfo*, MacroInfo*>::iterator Known + = PP.Macros.find(II); + if (Known == PP.Macros.end() || + Known->second->getUndefLoc().isInvalid()) { + II->setHasMacroDefinition(true); + if (DeserializationListener) + DeserializationListener->MacroVisible(II); + } } } } |

