[clang-format] Fix a regression in annotating TrailingReturnArrow (#86624)
authorOwen Pan <owenpiano@gmail.com>
Tue, 2 Apr 2024 21:48:14 +0000 (14:48 -0700)
committerllvmbot <60944935+llvmbot@users.noreply.github.com>
Fri, 26 Apr 2024 23:56:54 +0000 (16:56 -0700)
Fixes #86559.

(cherry picked from commit a7f4576ff4e296ff42b16d9d91aadf82b5ea325c)

clang/lib/Format/TokenAnnotator.cpp
clang/unittests/Format/TokenAnnotatorTest.cpp

index 9c4a8381f99824271622047dfba1c472ded51669..c1f166248192236bdf71dfba09628342299439ba 100644 (file)
@@ -3532,6 +3532,8 @@ void TokenAnnotator::calculateFormattingInformation(AnnotatedLine &Line) const {
       }
     } else if (ClosingParen) {
       for (auto *Tok = ClosingParen->Next; Tok; Tok = Tok->Next) {
+        if (Tok->is(TT_CtorInitializerColon))
+          break;
         if (Tok->is(tok::arrow)) {
           Tok->setType(TT_TrailingReturnArrow);
           break;
index c530339826a1d303cafabae91fc65aa1b9fd2745..44ebad9d5a872aac751ca1efdb4281337ae6f240 100644 (file)
@@ -1872,6 +1872,10 @@ TEST_F(TokenAnnotatorTest, UnderstandsTrailingReturnArrow) {
   ASSERT_EQ(Tokens.size(), 12u) << Tokens;
   EXPECT_TOKEN(Tokens[7], tok::arrow, TT_Unknown);
 
+  Tokens = annotate("__attribute__((cold)) C() : Base(obj->func()) {}");
+  ASSERT_EQ(Tokens.size(), 21u) << Tokens;
+  EXPECT_TOKEN(Tokens[13], tok::arrow, TT_Unknown);
+
   // Mixed
   Tokens = annotate("auto f() -> int { auto a = b()->c; }");
   ASSERT_EQ(Tokens.size(), 18u) << Tokens;