diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2012-12-08 02:21:11 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2012-12-08 02:21:11 +0000 |
commit | 61c1c8ee3fa1bd1f4866d246c72af854be834634 (patch) | |
tree | 6655e141eabff691db8fa1790b4e0d9b1cb73053 /lib/Lex/PPExpressions.cpp | |
parent | d5be2b5483757631cad00511b43ed7003defbfd9 (diff) |
[Preprocessor] Enhance Ifdef/Ifndef/Defined preprocessor callbacks to also pass
a MacroInfo object if the identifier was a macro name.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@169665 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Lex/PPExpressions.cpp')
-rw-r--r-- | lib/Lex/PPExpressions.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/lib/Lex/PPExpressions.cpp b/lib/Lex/PPExpressions.cpp index 868f2dda64..9b33c91bcb 100644 --- a/lib/Lex/PPExpressions.cpp +++ b/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()) { |