[llvm-branch-commits] [clang] release/22.x: [clang-format] Fix regression in annotating angles in static_assert (#187966) (PR #187991)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Mon Mar 23 01:17:45 PDT 2026
https://github.com/llvmbot created https://github.com/llvm/llvm-project/pull/187991
Backport 4b084f23bac39343d93ec91369efb2027d9fa153
Requested by: @owenca
>From f05e21077d86aa81832a72f541ff3f2212d5de8b Mon Sep 17 00:00:00 2001
From: owenca <owenpiano at gmail.com>
Date: Mon, 23 Mar 2026 01:06:30 -0700
Subject: [PATCH] [clang-format] Fix regression in annotating angles in
static_assert (#187966)
Fixes #187936
(cherry picked from commit 4b084f23bac39343d93ec91369efb2027d9fa153)
---
clang/lib/Format/TokenAnnotator.cpp | 7 ++++++-
clang/unittests/Format/TokenAnnotatorTest.cpp | 15 ++++++++++++++-
2 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp
index 17f5babf90f30..c0d31a1c9e2f4 100644
--- a/clang/lib/Format/TokenAnnotator.cpp
+++ b/clang/lib/Format/TokenAnnotator.cpp
@@ -186,7 +186,8 @@ class AnnotatingParser {
next();
for (bool SeenTernaryOperator = false, MaybeAngles = true; CurrentToken;) {
- const bool InExpr = Contexts[Contexts.size() - 2].IsExpression;
+ const auto &ParentContext = Contexts[Contexts.size() - 2];
+ const bool InExpr = ParentContext.IsExpression;
if (CurrentToken->is(tok::greater)) {
const auto *Next = CurrentToken->Next;
if (CurrentToken->isNot(TT_TemplateCloser)) {
@@ -208,6 +209,10 @@ class AnnotatingParser {
}
if (!MaybeAngles)
return false;
+ if (ParentContext.InStaticAssertFirstArgument && Next &&
+ Next->isOneOf(tok::minus, tok::identifier)) {
+ return false;
+ }
}
Left->MatchingParen = CurrentToken;
CurrentToken->MatchingParen = Left;
diff --git a/clang/unittests/Format/TokenAnnotatorTest.cpp b/clang/unittests/Format/TokenAnnotatorTest.cpp
index 8594f60453982..e449922710029 100644
--- a/clang/unittests/Format/TokenAnnotatorTest.cpp
+++ b/clang/unittests/Format/TokenAnnotatorTest.cpp
@@ -799,7 +799,7 @@ TEST_F(TokenAnnotatorTest, UnderstandsTemplateTemplateParameters) {
EXPECT_TOKEN(Tokens[23], tok::identifier, TT_ClassHeadName);
}
-TEST_F(TokenAnnotatorTest, UnderstandsCommonCppTemplates) {
+TEST_F(TokenAnnotatorTest, UnderstandsAnglesInStaticAssert) {
auto Tokens =
annotate("static_assert(std::conditional_t<A || B, C, D>::value);");
ASSERT_EQ(Tokens.size(), 19u) << Tokens;
@@ -821,6 +821,19 @@ TEST_F(TokenAnnotatorTest, UnderstandsCommonCppTemplates) {
ASSERT_EQ(Tokens.size(), 13u) << Tokens;
EXPECT_TOKEN(Tokens[3], tok::less, TT_TemplateOpener);
EXPECT_TOKEN(Tokens[7], tok::greater, TT_TemplateCloser);
+
+ Tokens = annotate("static_assert(foo < -bar && foo > -baz);");
+ ASSERT_EQ(Tokens.size(), 14u) << Tokens;
+ EXPECT_TOKEN(Tokens[3], tok::less, TT_BinaryOperator);
+ EXPECT_TOKEN(Tokens[8], tok::greater, TT_BinaryOperator);
+ EXPECT_TOKEN(Tokens[9], tok::minus, TT_UnaryOperator);
+
+ Tokens = annotate("static_assert(foo < bar && foo > baz);");
+ ASSERT_EQ(Tokens.size(), 12u) << Tokens;
+ EXPECT_TOKEN(Tokens[3], tok::less, TT_BinaryOperator);
+ EXPECT_TOKEN(Tokens[7], tok::greater, TT_BinaryOperator);
+ // Not TT_StartOfName.
+ EXPECT_TOKEN(Tokens[8], tok::identifier, TT_Unknown);
}
TEST_F(TokenAnnotatorTest, UnderstandsWhitespaceSensitiveMacros) {
More information about the llvm-branch-commits
mailing list