diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp --- a/clang/lib/Format/UnwrappedLineParser.cpp +++ b/clang/lib/Format/UnwrappedLineParser.cpp @@ -1931,11 +1931,11 @@ } bool UnwrappedLineParser::tryToParseLambda() { + assert(FormatTok->is(tok::l_square)); if (!Style.isCpp()) { nextToken(); return false; } - assert(FormatTok->is(tok::l_square)); FormatToken &LSquare = *FormatTok; if (!tryToParseLambdaIntroducer()) return false; @@ -2037,20 +2037,20 @@ bool UnwrappedLineParser::tryToParseLambdaIntroducer() { const FormatToken *Previous = FormatTok->Previous; + const FormatToken *LeftSquare = FormatTok; + nextToken(); if (Previous && (Previous->isOneOf(tok::identifier, tok::kw_operator, tok::kw_new, tok::kw_delete, tok::l_square) || - FormatTok->isCppStructuredBinding(Style) || Previous->closesScope() || + LeftSquare->isCppStructuredBinding(Style) || Previous->closesScope() || Previous->isSimpleTypeSpecifier())) { - nextToken(); return false; } - nextToken(); if (FormatTok->is(tok::l_square)) return false; if (FormatTok->is(tok::r_square)) { const FormatToken *Next = Tokens->peekNextToken(); - if (Next && Next->is(tok::greater)) + if (Next->is(tok::greater)) return false; } parseSquare(/*LambdaIntroducer=*/true);