Author: owenca Date: 2026-03-23T18:46:22Z New Revision: 1ab49a973e210e97d61e5db6557180dcb92c3e98
URL: https://github.com/llvm/llvm-project/commit/1ab49a973e210e97d61e5db6557180dcb92c3e98 DIFF: https://github.com/llvm/llvm-project/commit/1ab49a973e210e97d61e5db6557180dcb92c3e98.diff LOG: [clang-format] Fix regression in annotating angles in static_assert (#187966) Fixes #187936 (cherry picked from commit 4b084f23bac39343d93ec91369efb2027d9fa153) Added: Modified: clang/lib/Format/TokenAnnotator.cpp clang/unittests/Format/TokenAnnotatorTest.cpp Removed: ################################################################################ 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) { _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
