[llvm-branch-commits] [clang] release/22.x: [clang-format] Correctly annotate binary stars in braced init lists (#186732) (PR #188330)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Tue Mar 24 12:54:23 PDT 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang-format
Author: llvmbot
<details>
<summary>Changes</summary>
Backport 9d1d7a5645783b283f3289832a5d31feefd7a468
Requested by: @<!-- -->carlosgalvezp
---
Full diff: https://github.com/llvm/llvm-project/pull/188330.diff
2 Files Affected:
- (modified) clang/lib/Format/TokenAnnotator.cpp (+6-3)
- (modified) clang/unittests/Format/TokenAnnotatorTest.cpp (+6)
``````````diff
diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp
index c0d31a1c9e2f4..fe1361bb25693 100644
--- a/clang/lib/Format/TokenAnnotator.cpp
+++ b/clang/lib/Format/TokenAnnotator.cpp
@@ -1251,13 +1251,18 @@ class AnnotatingParser {
OpeningBrace.overwriteFixedType(TT_DictLiteral);
}
}
+ bool IsBracedListComma = false;
if (CurrentToken->is(tok::comma)) {
if (Style.isJavaScript())
OpeningBrace.overwriteFixedType(TT_DictLiteral);
+ else
+ IsBracedListComma = OpeningBrace.is(BK_BracedInit);
++CommaCount;
}
if (!consumeToken())
return false;
+ if (IsBracedListComma)
+ Contexts.back().IsExpression = true;
}
return true;
}
@@ -3051,7 +3056,7 @@ class AnnotatingParser {
return TT_BinaryOperator;
if (NextToken->isOneOf(tok::arrow, tok::equal, tok::comma, tok::r_paren,
- TT_RequiresClause) ||
+ tok::semi, TT_RequiresClause) ||
(NextToken->is(tok::kw_noexcept) && !IsExpression) ||
NextToken->canBePointerOrReferenceQualifier() ||
(NextToken->is(tok::l_brace) && !NextToken->getNextNonComment())) {
@@ -3071,8 +3076,6 @@ class AnnotatingParser {
return TT_PointerOrReference;
if (NextToken->is(tok::kw_operator) && !IsExpression)
return TT_PointerOrReference;
- if (NextToken->isOneOf(tok::comma, tok::semi))
- return TT_PointerOrReference;
// After right braces, star tokens are likely to be pointers to struct,
// union, or class.
diff --git a/clang/unittests/Format/TokenAnnotatorTest.cpp b/clang/unittests/Format/TokenAnnotatorTest.cpp
index e449922710029..82b6c7451d622 100644
--- a/clang/unittests/Format/TokenAnnotatorTest.cpp
+++ b/clang/unittests/Format/TokenAnnotatorTest.cpp
@@ -416,6 +416,12 @@ TEST_F(TokenAnnotatorTest, UnderstandsUsesOfStarAndAmp) {
EXPECT_TOKEN(Tokens[16], tok::star, TT_BinaryOperator);
EXPECT_TOKEN(Tokens[22], tok::star, TT_BinaryOperator);
+ Tokens = annotate("Foo foo{bar, bar * bar};");
+ ASSERT_EQ(Tokens.size(), 11u) << Tokens;
+ EXPECT_TOKEN(Tokens[6], tok::star, TT_BinaryOperator);
+ // Not TT_StartOfName.
+ EXPECT_TOKEN(Tokens[7], tok::identifier, TT_Unknown);
+
Tokens = annotate("NSError *__autoreleasing *foo;",
getLLVMStyle(FormatStyle::LK_ObjC));
ASSERT_EQ(Tokens.size(), 7u) << Tokens;
``````````
</details>
https://github.com/llvm/llvm-project/pull/188330
More information about the llvm-branch-commits
mailing list