diff options
Diffstat (limited to 'clang/lib/Lex')
-rw-r--r-- | clang/lib/Lex/PPConditionalDirectiveRecord.cpp | 6 | ||||
-rw-r--r-- | clang/lib/Lex/PPDirectives.cpp | 4 | ||||
-rw-r--r-- | clang/lib/Lex/PPExpressions.cpp | 12 |
3 files changed, 15 insertions, 7 deletions
diff --git a/clang/lib/Lex/PPConditionalDirectiveRecord.cpp b/clang/lib/Lex/PPConditionalDirectiveRecord.cpp index edcde871a03..063c556b4a5 100644 --- a/clang/lib/Lex/PPConditionalDirectiveRecord.cpp +++ b/clang/lib/Lex/PPConditionalDirectiveRecord.cpp @@ -82,13 +82,15 @@ void PPConditionalDirectiveRecord::If(SourceLocation Loc, } void PPConditionalDirectiveRecord::Ifdef(SourceLocation Loc, - const Token &MacroNameTok) { + const Token &MacroNameTok, + const MacroInfo *MI) { addCondDirectiveLoc(CondDirectiveLoc(Loc, CondDirectiveStack.back())); CondDirectiveStack.push_back(Loc); } void PPConditionalDirectiveRecord::Ifndef(SourceLocation Loc, - const Token &MacroNameTok) { + const Token &MacroNameTok, + const MacroInfo *MI) { addCondDirectiveLoc(CondDirectiveLoc(Loc, CondDirectiveStack.back())); CondDirectiveStack.push_back(Loc); } diff --git a/clang/lib/Lex/PPDirectives.cpp b/clang/lib/Lex/PPDirectives.cpp index 74a787daa90..7b5df9c3148 100644 --- a/clang/lib/Lex/PPDirectives.cpp +++ b/clang/lib/Lex/PPDirectives.cpp @@ -2047,9 +2047,9 @@ void Preprocessor::HandleIfdefDirective(Token &Result, bool isIfndef, if (Callbacks) { if (isIfndef) - Callbacks->Ifndef(DirectiveTok.getLocation(), MacroNameTok); + Callbacks->Ifndef(DirectiveTok.getLocation(), MacroNameTok, MI); else - Callbacks->Ifdef(DirectiveTok.getLocation(), MacroNameTok); + Callbacks->Ifdef(DirectiveTok.getLocation(), MacroNameTok, MI); } // Should we include the stuff contained by this directive? diff --git a/clang/lib/Lex/PPExpressions.cpp b/clang/lib/Lex/PPExpressions.cpp index 868f2dda647..9b33c91bcb5 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()) { |