Index: clang-tools-extra/clang-tidy/modernize/MacroToEnumCheck.cpp =================================================================== --- clang-tools-extra/clang-tidy/modernize/MacroToEnumCheck.cpp +++ clang-tools-extra/clang-tidy/modernize/MacroToEnumCheck.cpp @@ -278,20 +278,17 @@ } } +inline StringRef getTokenName(const Token &Tok) { + return Tok.is(tok::raw_identifier) ? Tok.getRawIdentifier() + : Tok.getIdentifierInfo()->getName(); +} + void MacroToEnumCallbacks::checkName(const Token &MacroNameTok) { - std::string Id; - if (MacroNameTok.is(tok::raw_identifier)) - Id = MacroNameTok.getRawIdentifier().str(); - else if (MacroNameTok.is(tok::identifier)) - Id = MacroNameTok.getIdentifierInfo()->getName().str(); - else { - assert(false && "Expected either an identifier or raw identifier token"); - return; - } + std::string Id = getTokenName(MacroNameTok).str(); llvm::erase_if(Enums, [&Id](const MacroList &MacroList) { return llvm::any_of(MacroList, [&Id](const EnumMacro &Macro) { - return Macro.Name.getIdentifierInfo()->getName().str() == Id; + return getTokenName(Macro.Name).str() == Id; }); }); } @@ -355,8 +352,7 @@ const MacroDefinition &MD, const MacroDirective *Undef) { auto MatchesToken = [&MacroNameTok](const EnumMacro &Macro) { - return Macro.Name.getIdentifierInfo()->getName() == - MacroNameTok.getIdentifierInfo()->getName(); + return getTokenName(Macro.Name) == getTokenName(MacroNameTok); }; auto It = llvm::find_if(Enums, [MatchesToken](const MacroList &MacroList) { @@ -432,8 +428,8 @@ void MacroToEnumCallbacks::warnMacroEnum(const EnumMacro &Macro) const { Check->diag(Macro.Directive->getLocation(), - "macro %0 defines an integral constant; prefer an enum instead") - << Macro.Name.getIdentifierInfo(); + "macro '%0' defines an integral constant; prefer an enum instead") + << getTokenName(Macro.Name).str(); } void MacroToEnumCallbacks::fixEnumMacro(const MacroList &MacroList) const { Index: clang-tools-extra/test/clang-tidy/checkers/modernize-macro-to-enum.cpp =================================================================== --- clang-tools-extra/test/clang-tidy/checkers/modernize-macro-to-enum.cpp +++ clang-tools-extra/test/clang-tidy/checkers/modernize-macro-to-enum.cpp @@ -208,6 +208,10 @@ #define IFNDEF3 3 #endif +// Sometimes an argument to ifdef can be classified as a keyword token. +#ifdef __restrict +#endif + // These macros do not expand to integral constants. #define HELLO "Hello, " #define WORLD "World"