summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Lex/PreprocessingRecord.cpp15
1 files changed, 12 insertions, 3 deletions
diff --git a/clang/lib/Lex/PreprocessingRecord.cpp b/clang/lib/Lex/PreprocessingRecord.cpp
index 4921a7fd901..6966c38b23d 100644
--- a/clang/lib/Lex/PreprocessingRecord.cpp
+++ b/clang/lib/Lex/PreprocessingRecord.cpp
@@ -92,7 +92,7 @@ void PreprocessingRecord::RegisterMacroDefinition(MacroInfo *Macro,
MacroDefinitions[Macro] = MD;
}
-MacroDefinition *PreprocessingRecord::findMacroDefinition(MacroInfo *MI) {
+MacroDefinition *PreprocessingRecord::findMacroDefinition(const MacroInfo *MI) {
llvm::DenseMap<const MacroInfo *, MacroDefinition *>::iterator Pos
= MacroDefinitions.find(MI);
if (Pos == MacroDefinitions.end())
@@ -102,10 +102,11 @@ MacroDefinition *PreprocessingRecord::findMacroDefinition(MacroInfo *MI) {
}
void PreprocessingRecord::MacroExpands(const Token &Id, const MacroInfo* MI) {
- PreprocessedEntities.push_back(
+ if (MacroDefinition *Def = findMacroDefinition(MI))
+ PreprocessedEntities.push_back(
new (*this) MacroInstantiation(Id.getIdentifierInfo(),
Id.getLocation(),
- MacroDefinitions[MI]));
+ Def));
}
void PreprocessingRecord::MacroDefined(const IdentifierInfo *II,
@@ -117,3 +118,11 @@ void PreprocessingRecord::MacroDefined(const IdentifierInfo *II,
PreprocessedEntities.push_back(Def);
}
+void PreprocessingRecord::MacroUndefined(const IdentifierInfo *II,
+ const MacroInfo *MI) {
+ llvm::DenseMap<const MacroInfo *, MacroDefinition *>::iterator Pos
+ = MacroDefinitions.find(MI);
+ if (Pos != MacroDefinitions.end())
+ MacroDefinitions.erase(Pos);
+}
+
OpenPOWER on IntegriCloud