aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Lex/PPExpressions.cpp
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2012-12-08 02:21:11 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2012-12-08 02:21:11 +0000
commit222a7bbf0ded69b369d05dbeeceef0d86cbb0f37 (patch)
tree73f1dc8cb777595293075037865d46523d759c9b /clang/lib/Lex/PPExpressions.cpp
parent189aba9305ee27c376b2474a3379416569a6b350 (diff)
downloadllvm-222a7bbf0ded69b369d05dbeeceef0d86cbb0f37.zip
llvm-222a7bbf0ded69b369d05dbeeceef0d86cbb0f37.tar.gz
llvm-222a7bbf0ded69b369d05dbeeceef0d86cbb0f37.tar.bz2
[Preprocessor] Enhance Ifdef/Ifndef/Defined preprocessor callbacks to also pass
a MacroInfo object if the identifier was a macro name. llvm-svn: 169665
Diffstat (limited to 'clang/lib/Lex/PPExpressions.cpp')
-rw-r--r--clang/lib/Lex/PPExpressions.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/clang/lib/Lex/PPExpressions.cpp b/clang/lib/Lex/PPExpressions.cpp
index 868f2dd..9b33c91 100644
--- a/clang/lib/Lex/PPExpressions.cpp
+++ b/clang/lib/Lex/PPExpressions.cpp
@@ -111,15 +111,21 @@ static bool EvaluateDefined(PPValue &Result, Token &PeekTok, DefinedTracker &DT,
Result.Val = II->hasMacroDefinition();
Result.Val.setIsUnsigned(false); // Result is signed intmax_t.
+ MacroInfo *Macro = 0;
// If there is a macro, mark it used.
if (Result.Val != 0 && ValueLive) {
- MacroInfo *Macro = PP.getMacroInfo(II);
+ Macro = PP.getMacroInfo(II);
PP.markMacroAsUsed(Macro);
}
// Invoke the 'defined' callback.
- if (PPCallbacks *Callbacks = PP.getPPCallbacks())
- Callbacks->Defined(PeekTok);
+ if (PPCallbacks *Callbacks = PP.getPPCallbacks()) {
+ MacroInfo *MI = Macro;
+ // Pass the MacroInfo for the macro name even if the value is dead.
+ if (!MI && Result.Val != 0)
+ MI = PP.getMacroInfo(II);
+ Callbacks->Defined(PeekTok, MI);
+ }
// If we are in parens, ensure we have a trailing ).
if (LParenLoc.isValid()) {