@@ -1708,6 +1708,7 @@ void UnwrappedLineParser::parseStructuralElement(
17081708 break ;
17091709 }
17101710
1711+ bool SeenEqual = false ;
17111712 for (const bool InRequiresExpression =
17121713 OpeningBrace && OpeningBrace->isOneOf (TT_RequiresExpressionLBrace,
17131714 TT_CompoundRequirementLBrace);
@@ -1782,7 +1783,7 @@ void UnwrappedLineParser::parseStructuralElement(
17821783 break ;
17831784 case tok::kw_requires: {
17841785 if (IsCpp) {
1785- bool ParsedClause = parseRequires ();
1786+ bool ParsedClause = parseRequires (SeenEqual );
17861787 if (ParsedClause)
17871788 return ;
17881789 } else {
@@ -2062,6 +2063,7 @@ void UnwrappedLineParser::parseStructuralElement(
20622063 break ;
20632064 }
20642065
2066+ SeenEqual = true ;
20652067 nextToken ();
20662068 if (FormatTok->is (tok::l_brace)) {
20672069 // Block kind should probably be set to BK_BracedInit for any language.
@@ -3416,7 +3418,7 @@ void UnwrappedLineParser::parseAccessSpecifier() {
34163418// / \brief Parses a requires, decides if it is a clause or an expression.
34173419// / \pre The current token has to be the requires keyword.
34183420// / \returns true if it parsed a clause.
3419- bool UnwrappedLineParser::parseRequires () {
3421+ bool UnwrappedLineParser::parseRequires (bool SeenEqual ) {
34203422 assert (FormatTok->is (tok::kw_requires) && " 'requires' expected" );
34213423 auto RequiresToken = FormatTok;
34223424
@@ -3472,7 +3474,7 @@ bool UnwrappedLineParser::parseRequires() {
34723474 // We check the one token before that for a const:
34733475 // void member(...) const && requires (C<T> ...
34743476 auto PrevPrev = PreviousNonComment->getPreviousNonComment ();
3475- if (PrevPrev && PrevPrev->is (tok::kw_const)) {
3477+ if (( PrevPrev && PrevPrev->is (tok::kw_const)) || !SeenEqual ) {
34763478 parseRequiresClause (RequiresToken);
34773479 return true ;
34783480 }
0 commit comments