diff options
Diffstat (limited to 'clang/lib/Lex/PPMacroExpansion.cpp')
-rw-r--r-- | clang/lib/Lex/PPMacroExpansion.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/clang/lib/Lex/PPMacroExpansion.cpp b/clang/lib/Lex/PPMacroExpansion.cpp index 6ec306196db..f1c69d99341 100644 --- a/clang/lib/Lex/PPMacroExpansion.cpp +++ b/clang/lib/Lex/PPMacroExpansion.cpp @@ -403,6 +403,12 @@ MacroArgs *Preprocessor::ReadFunctionLikeMacroArgs(Token &MacroName, Tok.setLocation(EndLoc); Tok.setLength(0); ArgTokens.push_back(Tok); + } else if (NumActuals == 1 && ArgTokens.size() == 1) { + // If there is exactly one argument, and that argument is just an EOF token, + // then we have an empty "()" argument empty list. This is fine, even if + // the macro expects one argument (the argument is just empty). However, if + // the macro expects "...", then we need to know that it was elided. + isVarargsElided = MinArgsExpected == 1 && MI->isVariadic(); } return MacroArgs::create(MI, &ArgTokens[0], ArgTokens.size(),isVarargsElided); |