зеркало из https://github.com/microsoft/clang-1.git
Allow variadic arguments without named ones for C++, e.g. "void(...);"
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57143 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
232eb7d33b
Коммит
e25d270b4d
|
@ -1233,6 +1233,7 @@ void Parser::ParseParenDeclarator(Declarator &D) {
|
|||
// paren, because we haven't seen the identifier yet.
|
||||
isGrouping = true;
|
||||
} else if (Tok.is(tok::r_paren) || // 'int()' is a function.
|
||||
(getLang().CPlusPlus && Tok.is(tok::ellipsis)) || // C++ int(...)
|
||||
isDeclarationSpecifier()) { // 'int(int)' is a function.
|
||||
// This handles C99 6.7.5.3p11: in "typedef int X; void foo(X)", X is
|
||||
// considered to be a type, not a K&R identifier-list.
|
||||
|
@ -1326,7 +1327,7 @@ void Parser::ParseFunctionDeclarator(SourceLocation LParenLoc, Declarator &D) {
|
|||
IsVariadic = true;
|
||||
|
||||
// Check to see if this is "void(...)" which is not allowed.
|
||||
if (ParamInfo.empty()) {
|
||||
if (!getLang().CPlusPlus && ParamInfo.empty()) {
|
||||
// Otherwise, parse parameter type list. If it starts with an
|
||||
// ellipsis, diagnose the malformed function.
|
||||
Diag(Tok, diag::err_ellipsis_first_arg);
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
// RUN: clang -fsyntax-only %s
|
||||
|
||||
void f(...) {
|
||||
int g(int(...));
|
||||
}
|
Загрузка…
Ссылка в новой задаче