Skip to content

Commit 0ae998c

Browse files
authored
[clang-format] Fix a bug in annotating TrailingReturnArrow (llvm#69249)
Skip TrailingAnnotation when looking for TrailingReturnArrow. Fixes llvm#69234.
1 parent 1db8abf commit 0ae998c

File tree

2 files changed

+12
-0
lines changed

2 files changed

+12
-0
lines changed

clang/lib/Format/TokenAnnotator.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3497,6 +3497,14 @@ void TokenAnnotator::calculateFormattingInformation(AnnotatedLine &Line) const {
34973497
Tok->setType(TT_TrailingReturnArrow);
34983498
break;
34993499
}
3500+
if (Tok->isNot(TT_TrailingAnnotation))
3501+
continue;
3502+
const auto *Next = Tok->Next;
3503+
if (!Next || Next->isNot(tok::l_paren))
3504+
continue;
3505+
Tok = Next->MatchingParen;
3506+
if (!Tok)
3507+
break;
35003508
}
35013509
}
35023510
}

clang/unittests/Format/TokenAnnotatorTest.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1826,6 +1826,10 @@ TEST_F(TokenAnnotatorTest, UnderstandsTrailingReturnArrow) {
18261826
ASSERT_EQ(Tokens.size(), 15u) << Tokens;
18271827
EXPECT_TOKEN(Tokens[12], tok::arrow, TT_Unknown);
18281828

1829+
Tokens = annotate("void f() FOO(foo->bar);");
1830+
ASSERT_EQ(Tokens.size(), 12u) << Tokens;
1831+
EXPECT_TOKEN(Tokens[7], tok::arrow, TT_Unknown);
1832+
18291833
// Mixed
18301834
Tokens = annotate("auto f() -> int { auto a = b()->c; }");
18311835
ASSERT_EQ(Tokens.size(), 18u) << Tokens;

0 commit comments

Comments
 (0)