summaryrefslogtreecommitdiffstats
path: root/clang/lib/Serialization/ASTReader.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2012-09-24 19:56:18 +0000
committerDouglas Gregor <dgregor@apple.com>2012-09-24 19:56:18 +0000
commite769d862eecef2e1935798cb9828f62b0407431a (patch)
tree5b95fc36afaff89cba46543b8022ccd61d21bf50 /clang/lib/Serialization/ASTReader.cpp
parent3cb355d11f6092dc3fe0d911556f56197d7b19d7 (diff)
downloadbcm5719-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.cpp12
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);
+ }
}
}
}
OpenPOWER on IntegriCloud