Skip to content

Commit b8a0558

Browse files
authored
[clang-format] Fix a regression on annotating template angles (llvm#132885)
Annotate the angles in `A<B != A>B` as template opener/closer as it's unlikely that they are less/greater-than operators in this context. Fix llvm#132248
1 parent 6294325 commit b8a0558

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

clang/lib/Format/TokenAnnotator.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -253,8 +253,7 @@ class AnnotatingParser {
253253
// FIXME: This is getting out of hand, write a decent parser.
254254
if (MaybeAngles && InExpr && !Line.startsWith(tok::kw_template) &&
255255
Prev.is(TT_BinaryOperator) &&
256-
(Prev.isOneOf(tok::pipepipe, tok::ampamp) ||
257-
Prev.getPrecedence() == prec::Equality)) {
256+
Prev.isOneOf(tok::pipepipe, tok::ampamp)) {
258257
MaybeAngles = false;
259258
}
260259
if (Prev.isOneOf(tok::question, tok::colon) && !Style.isProto())

clang/unittests/Format/TokenAnnotatorTest.cpp

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -720,8 +720,9 @@ TEST_F(TokenAnnotatorTest, UnderstandsNonTemplateAngleBrackets) {
720720

721721
Tokens = annotate("return A < B != A > B;");
722722
ASSERT_EQ(Tokens.size(), 10u) << Tokens;
723-
EXPECT_TOKEN(Tokens[2], tok::less, TT_BinaryOperator);
724-
EXPECT_TOKEN(Tokens[6], tok::greater, TT_BinaryOperator);
723+
// FIXME:
724+
// EXPECT_TOKEN(Tokens[2], tok::less, TT_BinaryOperator);
725+
// EXPECT_TOKEN(Tokens[6], tok::greater, TT_BinaryOperator);
725726

726727
Tokens = annotate("ratio{-1, 2} < ratio{-1, 3} == -1 / 3 > -1 / 2;");
727728
ASSERT_EQ(Tokens.size(), 27u) << Tokens;
@@ -3836,6 +3837,16 @@ TEST_F(TokenAnnotatorTest, TemplateInstantiation) {
38363837
ASSERT_EQ(Tokens.size(), 24u) << Tokens;
38373838
EXPECT_TOKEN(Tokens[6], tok::less, TT_TemplateOpener);
38383839
EXPECT_TOKEN(Tokens[18], tok::greater, TT_TemplateCloser);
3840+
3841+
Tokens = annotate(
3842+
"std::uint16_t kMTU = std::conditional<\n"
3843+
" kTypeKind == KindA,\n"
3844+
" std::integral_constant<std::uint16_t, kIoSockMtu>>::type::value;");
3845+
ASSERT_EQ(Tokens.size(), 30u) << Tokens;
3846+
EXPECT_TOKEN(Tokens[8], tok::less, TT_TemplateOpener);
3847+
EXPECT_TOKEN(Tokens[16], tok::less, TT_TemplateOpener);
3848+
EXPECT_TOKEN(Tokens[22], tok::greater, TT_TemplateCloser);
3849+
EXPECT_TOKEN(Tokens[23], tok::greater, TT_TemplateCloser);
38393850
}
38403851

38413852
TEST_F(TokenAnnotatorTest, VariableTemplate) {

0 commit comments

Comments
 (0)