Author: Owen Pan Date: 2024-06-02T12:26:10-07:00 New Revision: 80303cb287e2c52c7bf4923bc61ebe25b2421bdc
URL: https://github.com/llvm/llvm-project/commit/80303cb287e2c52c7bf4923bc61ebe25b2421bdc DIFF: https://github.com/llvm/llvm-project/commit/80303cb287e2c52c7bf4923bc61ebe25b2421bdc.diff LOG: [clang-format] Handle attributes before lambda return arrow (#94119) Fixes #92657. Added: Modified: clang/lib/Format/UnwrappedLineParser.cpp clang/unittests/Format/FormatTest.cpp clang/unittests/Format/TokenAnnotatorTest.cpp Removed: ################################################################################ diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp index 5c0ff0f6132b2..053fd3d4df559 100644 --- a/clang/lib/Format/UnwrappedLineParser.cpp +++ b/clang/lib/Format/UnwrappedLineParser.cpp @@ -2236,7 +2236,7 @@ bool UnwrappedLineParser::tryToParseLambda() { bool InTemplateParameterList = false; while (FormatTok->isNot(tok::l_brace)) { - if (FormatTok->isTypeName(LangOpts)) { + if (FormatTok->isTypeName(LangOpts) || FormatTok->isAttribute()) { nextToken(); continue; } diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 59f1ff6a4b296..6057d5b724bf9 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -22664,6 +22664,7 @@ TEST_F(FormatTest, FormatsLambdas) { verifyFormat("SomeFunction({[]() -> int *[] { return {}; }});"); verifyFormat("SomeFunction({[]() -> int (*)[] { return {}; }});"); verifyFormat("SomeFunction({[]() -> ns::type<int (*)[]> { return {}; }});"); + verifyFormat("foo([&](u32 bar) __attribute__((always_inline)) -> void {});"); verifyFormat("return int{[x = x]() { return x; }()};"); // Lambdas with explicit template argument lists. diff --git a/clang/unittests/Format/TokenAnnotatorTest.cpp b/clang/unittests/Format/TokenAnnotatorTest.cpp index 3339a749df3a5..df268f49e1eca 100644 --- a/clang/unittests/Format/TokenAnnotatorTest.cpp +++ b/clang/unittests/Format/TokenAnnotatorTest.cpp @@ -1577,6 +1577,12 @@ TEST_F(TokenAnnotatorTest, UnderstandsLambdas) { EXPECT_TOKEN(Tokens[2], tok::arrow, TT_TrailingReturnArrow); EXPECT_TOKEN(Tokens[4], tok::l_brace, TT_LambdaLBrace); + Tokens = annotate("foo([&](u32 bar) __attribute__((attr)) -> void {});"); + ASSERT_EQ(Tokens.size(), 22u) << Tokens; + EXPECT_TOKEN(Tokens[2], tok::l_square, TT_LambdaLSquare); + EXPECT_TOKEN(Tokens[15], tok::arrow, TT_TrailingReturnArrow); + EXPECT_TOKEN(Tokens[17], tok::l_brace, TT_LambdaLBrace); + Tokens = annotate("[] <typename T> () {}"); ASSERT_EQ(Tokens.size(), 11u) << Tokens; EXPECT_TOKEN(Tokens[0], tok::l_square, TT_LambdaLSquare); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits