Skip to content

[clang-format] Correctly annotate binary stars in braced init lists#186732

Merged
owenca merged 1 commit intollvm:mainfrom
owenca:175241
Mar 16, 2026
Merged

[clang-format] Correctly annotate binary stars in braced init lists#186732
owenca merged 1 commit intollvm:mainfrom
owenca:175241

Conversation

@owenca
Copy link
Copy Markdown
Contributor

@owenca owenca commented Mar 16, 2026

Fixes #175241

@llvmbot
Copy link
Copy Markdown
Member

llvmbot commented Mar 16, 2026

@llvm/pr-subscribers-clang-format

Author: owenca (owenca)

Changes

Fixes #175241


Full diff: https://github.com/llvm/llvm-project/pull/186732.diff

2 Files Affected:

  • (modified) clang/lib/Format/TokenAnnotator.cpp (+6-3)
  • (modified) clang/unittests/Format/TokenAnnotatorTest.cpp (+6)
diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp
index a60e7fa3eb7f4..c32822ce90d1f 100644
--- a/clang/lib/Format/TokenAnnotator.cpp
+++ b/clang/lib/Format/TokenAnnotator.cpp
@@ -1246,13 +1246,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;
   }
@@ -3046,7 +3051,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())) {
@@ -3066,8 +3071,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 defd78aedfd70..4081b9c9b4994 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;

@owenca owenca requested a review from mydeveloperday March 16, 2026 04:12
@owenca owenca merged commit 9d1d7a5 into llvm:main Mar 16, 2026
12 checks passed
@owenca owenca deleted the 175241 branch March 16, 2026 19:29
neonetizen pushed a commit to neonetizen/llvm-project that referenced this pull request Mar 17, 2026
@carlosgalvezp carlosgalvezp added this to the LLVM 22.x Release milestone Mar 24, 2026
@github-project-automation github-project-automation bot moved this to Needs Triage in LLVM Release Status Mar 24, 2026
@github-project-automation github-project-automation bot moved this from Needs Triage to Done in LLVM Release Status Mar 24, 2026
@carlosgalvezp
Copy link
Copy Markdown
Contributor

/cherry-pick 9d1d7a5

@llvmbot
Copy link
Copy Markdown
Member

llvmbot commented Mar 24, 2026

/pull-request #188330

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Development

Successfully merging this pull request may close these issues.

[clang-format] Confusion between multiplication and pointer

4 participants