Index: include/clang/Lex/MacroInfo.h =================================================================== --- include/clang/Lex/MacroInfo.h +++ include/clang/Lex/MacroInfo.h @@ -182,6 +182,9 @@ bool arg_empty() const { return NumArguments == 0; } arg_iterator arg_begin() const { return ArgumentList; } arg_iterator arg_end() const { return ArgumentList+NumArguments; } + ArrayRef args() const { + return ArrayRef(ArgumentList, NumArguments); + } unsigned getNumArgs() const { return NumArguments; } /// \brief Return the argument number of the specified identifier, Index: lib/Lex/PPMacroExpansion.cpp =================================================================== --- lib/Lex/PPMacroExpansion.cpp +++ lib/Lex/PPMacroExpansion.cpp @@ -362,9 +362,8 @@ // If this is a function-like macro invocation, it's safe to trivially expand // as long as the identifier is not a macro argument. - for (MacroInfo::arg_iterator I = MI->arg_begin(), E = MI->arg_end(); - I != E; ++I) - if (*I == II) + for (const auto &I : MI->args()) + if (I == II) return false; // Identifier is a macro argument. return true; Index: lib/Serialization/ASTWriter.cpp =================================================================== --- lib/Serialization/ASTWriter.cpp +++ lib/Serialization/ASTWriter.cpp @@ -2135,9 +2135,8 @@ Record.push_back(MI->isGNUVarargs()); Record.push_back(MI->hasCommaPasting()); Record.push_back(MI->getNumArgs()); - for (MacroInfo::arg_iterator I = MI->arg_begin(), E = MI->arg_end(); - I != E; ++I) - AddIdentifierRef(*I, Record); + for (const auto &I : MI->args()) + AddIdentifierRef(I, Record); } // If we have a detailed preprocessing record, record the macro definition