diff options
author | Douglas Gregor <dgregor@apple.com> | 2011-12-20 22:06:13 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2011-12-20 22:06:13 +0000 |
commit | 0abc262b02ae5b0a190e3de3be540fd2dc304aaa (patch) | |
tree | c1f341a22c1b18f860a36b07c46450f5b65ea973 /clang/lib/Serialization | |
parent | a1745c24c45b95eae178c158c28a4a2ab2503569 (diff) | |
download | bcm5719-llvm-0abc262b02ae5b0a190e3de3be540fd2dc304aaa.tar.gz bcm5719-llvm-0abc262b02ae5b0a190e3de3be540fd2dc304aaa.zip |
When we make a previously-deserialized module definition visible,
notify the AST deserialization listener so that the AST writer knows
that it can write the macro definition.
llvm-svn: 146994
Diffstat (limited to 'clang/lib/Serialization')
-rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 10 | ||||
-rw-r--r-- | clang/lib/Serialization/ASTWriter.cpp | 7 |
2 files changed, 14 insertions, 3 deletions
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index 5971011fce6..cb2759bd03a 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -2487,8 +2487,14 @@ void ASTReader::makeNamesVisible(const HiddenNames &Names) { for (unsigned I = 0, N = Names.size(); I != N; ++I) { if (Decl *D = Names[I].dyn_cast<Decl *>()) D->ModulePrivate = false; - else - Names[I].get<IdentifierInfo *>()->setHasMacroDefinition(true); + else { + IdentifierInfo *II = Names[I].get<IdentifierInfo *>(); + if (!II->hasMacroDefinition()) { + II->setHasMacroDefinition(true); + if (DeserializationListener) + DeserializationListener->MacroVisible(II); + } + } } } diff --git a/clang/lib/Serialization/ASTWriter.cpp b/clang/lib/Serialization/ASTWriter.cpp index 6883dbe3294..97c31b07a37 100644 --- a/clang/lib/Serialization/ASTWriter.cpp +++ b/clang/lib/Serialization/ASTWriter.cpp @@ -1660,8 +1660,9 @@ void ASTWriter::WritePreprocessor(const Preprocessor &PP, bool IsModule) { for (Preprocessor::macro_iterator I = PP.macro_begin(Chain == 0), E = PP.macro_end(Chain == 0); I != E; ++I) { + const IdentifierInfo *Name = I->first; if (!IsModule || I->second->isPublic()) { - MacroDefinitionsSeen.insert(I->first); + MacroDefinitionsSeen.insert(Name); MacrosToEmit.push_back(std::make_pair(I->first, I->second)); } } @@ -4262,6 +4263,10 @@ void ASTWriter::MacroDefinitionRead(serialization::PreprocessedEntityID ID, MacroDefinitions[MD] = ID; } +void ASTWriter::MacroVisible(IdentifierInfo *II) { + DeserializedMacroNames.push_back(II); +} + void ASTWriter::ModuleRead(serialization::SubmoduleID ID, Module *Mod) { assert(SubmoduleIDs.find(Mod) == SubmoduleIDs.end()); SubmoduleIDs[Mod] = ID; |