Author: Björn Schäpers Date: 2023-09-07T12:44:26+02:00 New Revision: 4f7086ce33fccd046dbd265debaf658d3dbf2e7c
URL: https://github.com/llvm/llvm-project/commit/4f7086ce33fccd046dbd265debaf658d3dbf2e7c DIFF: https://github.com/llvm/llvm-project/commit/4f7086ce33fccd046dbd265debaf658d3dbf2e7c.diff LOG: [clang-format] Fix misannotation of && before noexcept (#65526) When we are in an expression, it has to be a binary operator and not pointer or reference. 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 ea811414b73c506..3e0599eb540a95f 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -2535,8 +2535,9 @@ class AnnotatingParser { return TT_BinaryOperator; if (!NextToken || - NextToken->isOneOf(tok::arrow, tok::equal, tok::kw_noexcept, tok::comma, - tok::r_paren, TT_RequiresClause) || + NextToken->isOneOf(tok::arrow, tok::equal, tok::comma, tok::r_paren, + TT_RequiresClause) || + (NextToken->is(tok::kw_noexcept) && !IsExpression) || NextToken->canBePointerOrReferenceQualifier() || (NextToken->is(tok::l_brace) && !NextToken->getNextNonComment())) { return TT_PointerOrReference; diff --git a/clang/unittests/Format/TokenAnnotatorTest.cpp b/clang/unittests/Format/TokenAnnotatorTest.cpp index 467ade965d7c86a..66bfd7f0ef0d282 100644 --- a/clang/unittests/Format/TokenAnnotatorTest.cpp +++ b/clang/unittests/Format/TokenAnnotatorTest.cpp @@ -273,6 +273,13 @@ TEST_F(TokenAnnotatorTest, UnderstandsUsesOfStarAndAmp) { ASSERT_EQ(Tokens.size(), 19u) << Tokens; EXPECT_TOKEN(Tokens[5], tok::ampamp, TT_BinaryOperator); + Tokens = + annotate("auto foo() noexcept(noexcept(bar()) && " + "trait<std::decay_t<decltype(bar())>> && noexcept(baz())) {}"); + EXPECT_EQ(Tokens.size(), 38u) << Tokens; + EXPECT_TOKEN(Tokens[12], tok::ampamp, TT_BinaryOperator); + EXPECT_TOKEN(Tokens[27], tok::ampamp, TT_BinaryOperator); + FormatStyle Style = getLLVMStyle(); Style.TypeNames.push_back("MYI"); Tokens = annotate("if (MYI *p{nullptr})", Style); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits