diff --git a/clang/Lex/PPExpressions.cpp b/clang/Lex/PPExpressions.cpp index 7940cb643565..34cd73fb8b9a 100644 --- a/clang/Lex/PPExpressions.cpp +++ b/clang/Lex/PPExpressions.cpp @@ -67,7 +67,7 @@ static bool EvaluateValue(int &Result, LexerToken &PeekTok, DefinedTracker &DT, if (IdentifierInfo *II = PeekTok.getIdentifierInfo()) { // If this identifier isn't 'defined' and it wasn't macro expanded, it turns // into a simple 0. - if (strcmp(II->getName(), "defined")) { + if (II->getPPKeywordID() != tok::pp_defined) { Result = 0; PP.LexNonComment(PeekTok); return false; diff --git a/clang/Lex/Preprocessor.cpp b/clang/Lex/Preprocessor.cpp index 57cdbe944070..8facc3cce08d 100644 --- a/clang/Lex/Preprocessor.cpp +++ b/clang/Lex/Preprocessor.cpp @@ -1087,8 +1087,7 @@ void Preprocessor::ReadMacroName(LexerToken &MacroNameTok, char isDefineUndef) { } else if (0) { // FIXME: C++. Error if defining a C++ named operator. - } else if (isDefineUndef && II->getName()[0] == 'd' && // defined - !strcmp(II->getName()+1, "efined")) { + } else if (isDefineUndef && II->getPPKeywordID() == tok::pp_defined) { // Error if defining "defined": C99 6.10.8.4. Diag(MacroNameTok, diag::err_defined_macro_name); } else if (isDefineUndef && II->getMacroInfo() && diff --git a/clang/include/clang/Basic/TokenKinds.def b/clang/include/clang/Basic/TokenKinds.def index 9d37536961a1..850fcd613d59 100644 --- a/clang/include/clang/Basic/TokenKinds.def +++ b/clang/include/clang/Basic/TokenKinds.def @@ -51,6 +51,7 @@ PPKEYWORD(ifndef) PPKEYWORD(elif) PPKEYWORD(else) PPKEYWORD(endif) +PPKEYWORD(defined) // C99 6.10.2 - Source File Inclusion. PPKEYWORD(include)