[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:18:26 PDT 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang-format
Author: None (llvmbot)
<details>
<summary>Changes</summary>
Backport 4b084f23bac39343d93ec91369efb2027d9fa153
Requested by: @<!-- -->owenca
---
Full diff: https://github.com/llvm/llvm-project/pull/187991.diff
2 Files Affected:
- (modified) clang/lib/Format/TokenAnnotator.cpp (+6-1)
- (modified) clang/unittests/Format/TokenAnnotatorTest.cpp (+14-1)
``````````diff
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) {
``````````
</details>
https://github.com/llvm/llvm-project/pull/187991
More information about the llvm-branch-commits
mailing list