[clang] 17fb879 - [clang-format] FIX: Misannotation 'auto' as trailing return type in lambdas
Aleksandr Platonov via cfe-commits
cfe-commits at lists.llvm.org
Wed Jul 27 12:22:48 PDT 2022
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
More information about the cfe-commits
mailing list