Skip to content

Commit 17fb879

Browse files
denis-fatkulinArcsinX
authored andcommitted
[clang-format] FIX: Misannotation 'auto' as trailing return type in lambdas
Lambdas with trailing return type 'auto' are annotated incorrectly. It causes a misformatting. The simpliest code to reproduce is: ``` auto list = {[]() -> auto { return 0; }}; ``` Fixes #54798 Reviewed By: HazardyKnusperkeks, owenpan, curdeius Differential Revision: https://reviews.llvm.org/D130299
1 parent 0fdf8db commit 17fb879

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

clang/lib/Format/UnwrappedLineParser.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2108,6 +2108,7 @@ bool UnwrappedLineParser::tryToParseLambda() {
21082108
case tok::l_square:
21092109
parseSquare();
21102110
break;
2111+
case tok::kw_auto:
21112112
case tok::kw_class:
21122113
case tok::kw_template:
21132114
case tok::kw_typename:

clang/unittests/Format/TokenAnnotatorTest.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -747,6 +747,21 @@ TEST_F(TokenAnnotatorTest, UnderstandsLambdas) {
747747
ASSERT_EQ(Tokens.size(), 8u) << Tokens;
748748
EXPECT_TOKEN(Tokens[0], tok::l_square, TT_LambdaLSquare);
749749
EXPECT_TOKEN(Tokens[5], tok::l_brace, TT_LambdaLBrace);
750+
751+
Tokens = annotate("[]() -> auto {}");
752+
ASSERT_EQ(Tokens.size(), 9u) << Tokens;
753+
EXPECT_TOKEN(Tokens[4], tok::arrow, TT_LambdaArrow);
754+
EXPECT_TOKEN(Tokens[6], tok::l_brace, TT_LambdaLBrace);
755+
756+
Tokens = annotate("[]() -> auto & {}");
757+
ASSERT_EQ(Tokens.size(), 10u) << Tokens;
758+
EXPECT_TOKEN(Tokens[4], tok::arrow, TT_LambdaArrow);
759+
EXPECT_TOKEN(Tokens[7], tok::l_brace, TT_LambdaLBrace);
760+
761+
Tokens = annotate("[]() -> auto * {}");
762+
ASSERT_EQ(Tokens.size(), 10u) << Tokens;
763+
EXPECT_TOKEN(Tokens[4], tok::arrow, TT_LambdaArrow);
764+
EXPECT_TOKEN(Tokens[7], tok::l_brace, TT_LambdaLBrace);
750765
}
751766

752767
} // namespace

0 commit comments

Comments
 (0)