Parse brace initializers as default arguments. PR12236.
llvm-svn: 152721
This commit is contained in:
parent
fe66dd624d
commit
db63af2216
|
@ -319,7 +319,11 @@ void Parser::ParseLexedMethodDeclaration(LateParsedMethodDeclaration &LM) {
|
|||
Sema::PotentiallyEvaluatedIfUsed,
|
||||
LM.DefaultArgs[I].Param);
|
||||
|
||||
ExprResult DefArgResult(ParseAssignmentExpression());
|
||||
ExprResult DefArgResult;
|
||||
if (Tok.is(tok::l_brace))
|
||||
DefArgResult = ParseBraceInitializer();
|
||||
else
|
||||
DefArgResult = ParseAssignmentExpression();
|
||||
if (DefArgResult.isInvalid())
|
||||
Actions.ActOnParamDefaultArgumentError(LM.DefaultArgs[I].Param);
|
||||
else {
|
||||
|
|
|
@ -4169,6 +4169,7 @@ void Parser::ParseFunctionDeclaratorIdentifierList(
|
|||
/// parameter-declaration: [C99 6.7.5]
|
||||
/// declaration-specifiers declarator
|
||||
/// [C++] declaration-specifiers declarator '=' assignment-expression
|
||||
/// [C++11] initializer-clause
|
||||
/// [GNU] declaration-specifiers declarator attributes
|
||||
/// declaration-specifiers abstract-declarator[opt]
|
||||
/// [C++] declaration-specifiers abstract-declarator[opt]
|
||||
|
@ -4280,7 +4281,11 @@ void Parser::ParseParameterDeclarationClause(
|
|||
Sema::PotentiallyEvaluatedIfUsed,
|
||||
Param);
|
||||
|
||||
ExprResult DefArgResult(ParseAssignmentExpression());
|
||||
ExprResult DefArgResult;
|
||||
if (Tok.is(tok::l_brace))
|
||||
DefArgResult = ParseBraceInitializer();
|
||||
else
|
||||
DefArgResult = ParseAssignmentExpression();
|
||||
if (DefArgResult.isInvalid()) {
|
||||
Actions.ActOnParamDefaultArgumentError(Param);
|
||||
SkipUntil(tok::comma, tok::r_paren, true, true);
|
||||
|
|
|
@ -96,6 +96,13 @@ namespace integral {
|
|||
(void) int({0}); // expected-error {{functional-style cast}}
|
||||
new int({0}); // expected-error {{cannot initialize}}
|
||||
}
|
||||
|
||||
void default_argument(int i = {}) {
|
||||
}
|
||||
struct DefaultArgument {
|
||||
void default_argument(int i = {}) {
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
namespace PR12118 {
|
||||
|
|
Loading…
Reference in New Issue