diff --git a/clang/include/clang/Parse/Parser.h b/clang/include/clang/Parse/Parser.h index 997a649f6b3084..9e49ade8d6337c 100644 --- a/clang/include/clang/Parse/Parser.h +++ b/clang/include/clang/Parse/Parser.h @@ -1835,11 +1835,8 @@ class Parser : public CodeCompletionHandler { ParsedType &CastTy, SourceRange &CastRange); - typedef SmallVector CommaLocsTy; - /// ParseExpressionList - Used for C/C++ (argument-)expression-list. bool ParseExpressionList(SmallVectorImpl &Exprs, - SmallVectorImpl &CommaLocs, llvm::function_ref ExpressionStarts = llvm::function_ref(), bool FailImmediatelyOnInvalidExpr = false, @@ -1847,9 +1844,7 @@ class Parser : public CodeCompletionHandler { /// ParseSimpleExpressionList - A simple comma-separated list of expressions, /// used for misc language extensions. - bool ParseSimpleExpressionList(SmallVectorImpl &Exprs, - SmallVectorImpl &CommaLocs); - + bool ParseSimpleExpressionList(SmallVectorImpl &Exprs); /// ParenParseOption - Control what ParseParenExpression will parse. enum ParenParseOption { diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp index d7942fa8d82fac..5a65a23cba72ad 100644 --- a/clang/lib/Parse/ParseDecl.cpp +++ b/clang/lib/Parse/ParseDecl.cpp @@ -449,10 +449,8 @@ unsigned Parser::ParseAttributeArgsCommon( ? Sema::ExpressionEvaluationContext::Unevaluated : Sema::ExpressionEvaluationContext::ConstantEvaluated); - CommaLocsTy CommaLocs; ExprVector ParsedExprs; - if (ParseExpressionList(ParsedExprs, CommaLocs, - llvm::function_ref(), + if (ParseExpressionList(ParsedExprs, llvm::function_ref(), /*FailImmediatelyOnInvalidExpr=*/true, /*EarlyTypoCorrection=*/true)) { SkipUntil(tok::r_paren, StopAtSemi); @@ -2499,7 +2497,6 @@ Decl *Parser::ParseDeclarationAfterDeclaratorAndAttributes( T.consumeOpen(); ExprVector Exprs; - CommaLocsTy CommaLocs; InitializerScopeRAII InitScope(*this, D, ThisDecl); @@ -2524,7 +2521,7 @@ Decl *Parser::ParseDeclarationAfterDeclaratorAndAttributes( // ProduceConstructorSignatureHelp only on VarDecls. ExpressionStarts = SetPreferredType; } - if (ParseExpressionList(Exprs, CommaLocs, ExpressionStarts)) { + if (ParseExpressionList(Exprs, ExpressionStarts)) { if (ThisVarDecl && PP.isCodeCompletionReached() && !CalledSignatureHelp) { Actions.ProduceConstructorSignatureHelp( ThisVarDecl->getType()->getCanonicalTypeInternal(), @@ -2537,10 +2534,6 @@ Decl *Parser::ParseDeclarationAfterDeclaratorAndAttributes( } else { // Match the ')'. T.consumeClose(); - - assert(!Exprs.empty() && Exprs.size()-1 == CommaLocs.size() && - "Unexpected number of commas!"); - InitScope.pop(); ExprResult Initializer = Actions.ActOnParenListExpr(T.getOpenLocation(), diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp index 7456df00f77f39..e626622c80a2b5 100644 --- a/clang/lib/Parse/ParseDeclCXX.cpp +++ b/clang/lib/Parse/ParseDeclCXX.cpp @@ -3803,7 +3803,6 @@ MemInitResult Parser::ParseMemInitializer(Decl *ConstructorDecl) { // Parse the optional expression-list. ExprVector ArgExprs; - CommaLocsTy CommaLocs; auto RunSignatureHelp = [&] { if (TemplateTypeTy.isInvalid()) return QualType(); @@ -3813,8 +3812,7 @@ MemInitResult Parser::ParseMemInitializer(Decl *ConstructorDecl) { CalledSignatureHelp = true; return PreferredType; }; - if (Tok.isNot(tok::r_paren) && - ParseExpressionList(ArgExprs, CommaLocs, [&] { + if (Tok.isNot(tok::r_paren) && ParseExpressionList(ArgExprs, [&] { PreferredType.enterFunctionArgument(Tok.getLocation(), RunSignatureHelp); })) { diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp index 3ad1a17a66818a..caa608e16a53a3 100644 --- a/clang/lib/Parse/ParseExpr.cpp +++ b/clang/lib/Parse/ParseExpr.cpp @@ -1961,14 +1961,10 @@ Parser::ParsePostfixExpressionSuffix(ExprResult LHS) { ArgExprs.push_back(Idx.get()); } } else if (Tok.isNot(tok::r_square)) { - CommaLocsTy CommaLocs; - if (ParseExpressionList(ArgExprs, CommaLocs)) { + if (ParseExpressionList(ArgExprs)) { LHS = Actions.CorrectDelayedTyposInExpr(LHS); HasError = true; } - assert( - (ArgExprs.empty() || ArgExprs.size() == CommaLocs.size() + 1) && - "Unexpected number of commas!"); } } @@ -2030,10 +2026,9 @@ Parser::ParsePostfixExpressionSuffix(ExprResult LHS) { if (OpKind == tok::lesslessless) { ExprVector ExecConfigExprs; - CommaLocsTy ExecConfigCommaLocs; SourceLocation OpenLoc = ConsumeToken(); - if (ParseSimpleExpressionList(ExecConfigExprs, ExecConfigCommaLocs)) { + if (ParseSimpleExpressionList(ExecConfigExprs)) { (void)Actions.CorrectDelayedTyposInExpr(LHS); LHS = ExprError(); } @@ -2073,7 +2068,6 @@ Parser::ParsePostfixExpressionSuffix(ExprResult LHS) { } ExprVector ArgExprs; - CommaLocsTy CommaLocs; auto RunSignatureHelp = [&]() -> QualType { QualType PreferredType = Actions.ProduceCallSignatureHelp( LHS.get(), ArgExprs, PT.getOpenLocation()); @@ -2082,7 +2076,7 @@ Parser::ParsePostfixExpressionSuffix(ExprResult LHS) { }; if (OpKind == tok::l_paren || !LHS.isInvalid()) { if (Tok.isNot(tok::r_paren)) { - if (ParseExpressionList(ArgExprs, CommaLocs, [&] { + if (ParseExpressionList(ArgExprs, [&] { PreferredType.enterFunctionArgument(Tok.getLocation(), RunSignatureHelp); })) { @@ -2120,9 +2114,6 @@ Parser::ParsePostfixExpressionSuffix(ExprResult LHS) { PT.consumeClose(); LHS = ExprError(); } else { - assert( - (ArgExprs.size() == 0 || ArgExprs.size() - 1 == CommaLocs.size()) && - "Unexpected number of commas!"); Expr *Fn = LHS.get(); SourceLocation RParLoc = Tok.getLocation(); LHS = Actions.ActOnCallExpr(getCurScope(), Fn, Loc, ArgExprs, RParLoc, @@ -3126,11 +3117,9 @@ Parser::ParseParenExpression(ParenParseOption &ExprType, bool stopIfCastExpr, } else if (isTypeCast) { // Parse the expression-list. InMessageExpressionRAIIObject InMessage(*this, false); - ExprVector ArgExprs; - CommaLocsTy CommaLocs; - if (!ParseSimpleExpressionList(ArgExprs, CommaLocs)) { + if (!ParseSimpleExpressionList(ArgExprs)) { // FIXME: If we ever support comma expressions as operands to // fold-expressions, we'll need to allow multiple ArgExprs here. if (ExprType >= FoldExpr && ArgExprs.size() == 1 && @@ -3429,7 +3418,6 @@ ExprResult Parser::ParseFoldExpression(ExprResult LHS, /// [C++0x] braced-init-list /// \endverbatim bool Parser::ParseExpressionList(SmallVectorImpl &Exprs, - SmallVectorImpl &CommaLocs, llvm::function_ref ExpressionStarts, bool FailImmediatelyOnInvalidExpr, bool EarlyTypoCorrection) { @@ -3473,8 +3461,7 @@ bool Parser::ParseExpressionList(SmallVectorImpl &Exprs, break; // Move to the next argument, remember where the comma was. Token Comma = Tok; - CommaLocs.push_back(ConsumeToken()); - + ConsumeToken(); checkPotentialAngleBracketDelimiter(Comma); } if (SawError) { @@ -3496,9 +3483,7 @@ bool Parser::ParseExpressionList(SmallVectorImpl &Exprs, /// assignment-expression /// simple-expression-list , assignment-expression /// \endverbatim -bool -Parser::ParseSimpleExpressionList(SmallVectorImpl &Exprs, - SmallVectorImpl &CommaLocs) { +bool Parser::ParseSimpleExpressionList(SmallVectorImpl &Exprs) { while (true) { ExprResult Expr = ParseAssignmentExpression(); if (Expr.isInvalid()) @@ -3513,8 +3498,7 @@ Parser::ParseSimpleExpressionList(SmallVectorImpl &Exprs, // Move to the next argument, remember where the comma was. Token Comma = Tok; - CommaLocs.push_back(ConsumeToken()); - + ConsumeToken(); checkPotentialAngleBracketDelimiter(Comma); } } diff --git a/clang/lib/Parse/ParseExprCXX.cpp b/clang/lib/Parse/ParseExprCXX.cpp index a768c4da504afc..1a268dee3be139 100644 --- a/clang/lib/Parse/ParseExprCXX.cpp +++ b/clang/lib/Parse/ParseExprCXX.cpp @@ -981,11 +981,10 @@ bool Parser::ParseLambdaIntroducer(LambdaIntroducer &Intro, InitKind = LambdaCaptureInitKind::DirectInit; ExprVector Exprs; - CommaLocsTy Commas; if (Tentative) { Parens.skipToEnd(); *Tentative = LambdaIntroducerTentativeParse::Incomplete; - } else if (ParseExpressionList(Exprs, Commas)) { + } else if (ParseExpressionList(Exprs)) { Parens.skipToEnd(); Init = ExprError(); } else { @@ -1929,7 +1928,6 @@ Parser::ParseCXXTypeConstructExpression(const DeclSpec &DS) { PreferredType.enterTypeCast(Tok.getLocation(), TypeRep.get()); ExprVector Exprs; - CommaLocsTy CommaLocs; auto RunSignatureHelp = [&]() { QualType PreferredType; @@ -1942,7 +1940,7 @@ Parser::ParseCXXTypeConstructExpression(const DeclSpec &DS) { }; if (Tok.isNot(tok::r_paren)) { - if (ParseExpressionList(Exprs, CommaLocs, [&] { + if (ParseExpressionList(Exprs, [&] { PreferredType.enterFunctionArgument(Tok.getLocation(), RunSignatureHelp); })) { @@ -1960,8 +1958,6 @@ Parser::ParseCXXTypeConstructExpression(const DeclSpec &DS) { if (!TypeRep) return ExprError(); - assert((Exprs.size() == 0 || Exprs.size()-1 == CommaLocs.size())&& - "Unexpected number of commas!"); return Actions.ActOnCXXTypeConstructExpr(TypeRep, T.getOpenLocation(), Exprs, T.getCloseLocation(), /*ListInitialization=*/false); @@ -3239,7 +3235,6 @@ Parser::ParseCXXNewExpression(bool UseGlobal, SourceLocation Start) { T.consumeOpen(); ConstructorLParen = T.getOpenLocation(); if (Tok.isNot(tok::r_paren)) { - CommaLocsTy CommaLocs; auto RunSignatureHelp = [&]() { ParsedType TypeRep = Actions.ActOnTypeName(getCurScope(), DeclaratorInfo).get(); @@ -3255,7 +3250,7 @@ Parser::ParseCXXNewExpression(bool UseGlobal, SourceLocation Start) { CalledSignatureHelp = true; return PreferredType; }; - if (ParseExpressionList(ConstructorArgs, CommaLocs, [&] { + if (ParseExpressionList(ConstructorArgs, [&] { PreferredType.enterFunctionArgument(Tok.getLocation(), RunSignatureHelp); })) { @@ -3354,9 +3349,7 @@ bool Parser::ParseExpressionListOrTypeId( } // It's not a type, it has to be an expression list. - // Discard the comma locations - ActOnCXXNew has enough parameters. - CommaLocsTy CommaLocs; - return ParseExpressionList(PlacementArgs, CommaLocs); + return ParseExpressionList(PlacementArgs); } /// ParseCXXDeleteExpression - Parse a C++ delete-expression. Delete is used diff --git a/clang/lib/Parse/ParseOpenMP.cpp b/clang/lib/Parse/ParseOpenMP.cpp index 489cfea7d3823d..e306e627661645 100644 --- a/clang/lib/Parse/ParseOpenMP.cpp +++ b/clang/lib/Parse/ParseOpenMP.cpp @@ -475,7 +475,6 @@ void Parser::ParseOpenMPReductionInitializerForDecl(VarDecl *OmpPrivParm) { T.consumeOpen(); ExprVector Exprs; - CommaLocsTy CommaLocs; SourceLocation LParLoc = T.getOpenLocation(); auto RunSignatureHelp = [this, OmpPrivParm, LParLoc, &Exprs]() { @@ -485,7 +484,7 @@ void Parser::ParseOpenMPReductionInitializerForDecl(VarDecl *OmpPrivParm) { CalledSignatureHelp = true; return PreferredType; }; - if (ParseExpressionList(Exprs, CommaLocs, [&] { + if (ParseExpressionList(Exprs, [&] { PreferredType.enterFunctionArgument(Tok.getLocation(), RunSignatureHelp); })) { @@ -499,9 +498,6 @@ void Parser::ParseOpenMPReductionInitializerForDecl(VarDecl *OmpPrivParm) { if (!T.consumeClose()) RLoc = T.getCloseLocation(); - assert(!Exprs.empty() && Exprs.size() - 1 == CommaLocs.size() && - "Unexpected number of commas!"); - ExprResult Initializer = Actions.ActOnParenListExpr(T.getOpenLocation(), RLoc, Exprs); Actions.AddInitializerToDecl(OmpPrivParm, Initializer.get(),