Author: Denis Fatkulin Date: 2022-07-27T22:20:09+03:00 New Revision: 17fb879764dcaf1f5f6bc505c5c747067ba7c3cd
URL: https://github.com/llvm/llvm-project/commit/17fb879764dcaf1f5f6bc505c5c747067ba7c3cd DIFF: https://github.com/llvm/llvm-project/commit/17fb879764dcaf1f5f6bc505c5c747067ba7c3cd.diff LOG: [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 https://github.com/llvm/llvm-project/issues/54798 Reviewed By: HazardyKnusperkeks, owenpan, curdeius Differential Revision: https://reviews.llvm.org/D130299 Added: Modified: clang/lib/Format/UnwrappedLineParser.cpp clang/unittests/Format/TokenAnnotatorTest.cpp Removed: ################################################################################ diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp index 83b4f1e7991f8..b936f73d70fa7 100644 --- a/clang/lib/Format/UnwrappedLineParser.cpp +++ b/clang/lib/Format/UnwrappedLineParser.cpp @@ -2108,6 +2108,7 @@ bool UnwrappedLineParser::tryToParseLambda() { case tok::l_square: parseSquare(); break; + case tok::kw_auto: case tok::kw_class: case tok::kw_template: case tok::kw_typename: diff --git a/clang/unittests/Format/TokenAnnotatorTest.cpp b/clang/unittests/Format/TokenAnnotatorTest.cpp index 4b2622522e0f8..b2c50aaea6d79 100644 --- a/clang/unittests/Format/TokenAnnotatorTest.cpp +++ b/clang/unittests/Format/TokenAnnotatorTest.cpp @@ -747,6 +747,21 @@ TEST_F(TokenAnnotatorTest, UnderstandsLambdas) { ASSERT_EQ(Tokens.size(), 8u) << Tokens; EXPECT_TOKEN(Tokens[0], tok::l_square, TT_LambdaLSquare); EXPECT_TOKEN(Tokens[5], tok::l_brace, TT_LambdaLBrace); + + Tokens = annotate("[]() -> auto {}"); + ASSERT_EQ(Tokens.size(), 9u) << Tokens; + EXPECT_TOKEN(Tokens[4], tok::arrow, TT_LambdaArrow); + EXPECT_TOKEN(Tokens[6], tok::l_brace, TT_LambdaLBrace); + + Tokens = annotate("[]() -> auto & {}"); + ASSERT_EQ(Tokens.size(), 10u) << Tokens; + EXPECT_TOKEN(Tokens[4], tok::arrow, TT_LambdaArrow); + EXPECT_TOKEN(Tokens[7], tok::l_brace, TT_LambdaLBrace); + + Tokens = annotate("[]() -> auto * {}"); + ASSERT_EQ(Tokens.size(), 10u) << Tokens; + EXPECT_TOKEN(Tokens[4], tok::arrow, TT_LambdaArrow); + EXPECT_TOKEN(Tokens[7], tok::l_brace, TT_LambdaLBrace); } } // namespace _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits