llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang-format Author: owenca (owenca) <details> <summary>Changes</summary> Fixes #<!-- -->187958 --- Full diff: https://github.com/llvm/llvm-project/pull/187966.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 ee14469cfc968..d2cdc28a7da7b 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 756e97708cb8c..efb361387bb1e 100644 --- a/clang/unittests/Format/TokenAnnotatorTest.cpp +++ b/clang/unittests/Format/TokenAnnotatorTest.cpp @@ -805,7 +805,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; @@ -827,6 +827,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/187966 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
