[cfe-commits] r99004 - in /cfe/trunk: include/clang/Lex/PreprocessingRecord.h lib/Lex/PreprocessingRecord.cpp test/Index/c-index-getCursor-test.m
Douglas Gregor
dgregor at apple.com
Fri Mar 19 14:58:23 PDT 2010
Author: dgregor
Date: Fri Mar 19 16:58:23 2010
New Revision: 99004
URL: http://llvm.org/viewvc/llvm-project?rev=99004&view=rev
Log:
Robustify PreprocessingRecord slightly, by only creating macro
instantiations when we have the corresponding macro definition and by
removing macro definition information from our table when the macro is
undefined.
Modified:
cfe/trunk/include/clang/Lex/PreprocessingRecord.h
cfe/trunk/lib/Lex/PreprocessingRecord.cpp
cfe/trunk/test/Index/c-index-getCursor-test.m
Modified: cfe/trunk/include/clang/Lex/PreprocessingRecord.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/PreprocessingRecord.h?rev=99004&r1=99003&r2=99004&view=diff
==============================================================================
--- cfe/trunk/include/clang/Lex/PreprocessingRecord.h (original)
+++ cfe/trunk/include/clang/Lex/PreprocessingRecord.h Fri Mar 19 16:58:23 2010
@@ -253,10 +253,11 @@
/// \brief Retrieve the macro definition that corresponds to the given
/// \c MacroInfo.
- MacroDefinition *findMacroDefinition(MacroInfo *MI);
+ MacroDefinition *findMacroDefinition(const MacroInfo *MI);
virtual void MacroExpands(const Token &Id, const MacroInfo* MI);
virtual void MacroDefined(const IdentifierInfo *II, const MacroInfo *MI);
+ virtual void MacroUndefined(const IdentifierInfo *II, const MacroInfo *MI);
};
} // end namespace clang
Modified: cfe/trunk/lib/Lex/PreprocessingRecord.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PreprocessingRecord.cpp?rev=99004&r1=99003&r2=99004&view=diff
==============================================================================
--- cfe/trunk/lib/Lex/PreprocessingRecord.cpp (original)
+++ cfe/trunk/lib/Lex/PreprocessingRecord.cpp Fri Mar 19 16:58:23 2010
@@ -92,7 +92,7 @@
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 @@
}
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 @@
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);
+}
+
Modified: cfe/trunk/test/Index/c-index-getCursor-test.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/c-index-getCursor-test.m?rev=99004&r1=99003&r2=99004&view=diff
==============================================================================
--- cfe/trunk/test/Index/c-index-getCursor-test.m (original)
+++ cfe/trunk/test/Index/c-index-getCursor-test.m Fri Mar 19 16:58:23 2010
@@ -57,6 +57,7 @@
void f() {
int CONCAT(my,_var);
}
+#undef CONCAT
// CHECK: [1:1 - 3:1] Invalid Cursor => NoDeclFound
// CHECK: [3:1 - 7:1] ObjCInterfaceDecl=Foo:3:12
More information about the cfe-commits
mailing list