https://github.com/owenca created https://github.com/llvm/llvm-project/pull/109505
Fixes #109371. >From 192deb4adc9f7e77167a02c060eef8c91932b912 Mon Sep 17 00:00:00 2001 From: Owen Pan <owenpi...@gmail.com> Date: Fri, 20 Sep 2024 20:28:31 -0700 Subject: [PATCH] [clang-format] Correctly annotate */& in if condition with braced init Fixes #109371. --- clang/lib/Format/TokenAnnotator.cpp | 25 ++++++++++++------- clang/unittests/Format/TokenAnnotatorTest.cpp | 5 ++++ 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index f665ce2ad81eb0..f5acfaaee900a2 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -1165,19 +1165,26 @@ class AnnotatingParser { ScopedContextCreator ContextCreator(*this, tok::l_brace, 1); Contexts.back().ColonIsDictLiteral = true; - if (OpeningBrace.is(BK_BracedInit)) + + const auto *Prev = OpeningBrace.getPreviousNonComment(); + + if (OpeningBrace.is(BK_BracedInit)) { Contexts.back().IsExpression = true; - if (Style.isJavaScript() && OpeningBrace.Previous && - OpeningBrace.Previous->is(TT_JsTypeColon)) { - Contexts.back().IsExpression = false; - } - if (Style.isVerilog() && - (!OpeningBrace.getPreviousNonComment() || - OpeningBrace.getPreviousNonComment()->isNot(Keywords.kw_apostrophe))) { - Contexts.back().VerilogMayBeConcatenation = true; + if (Prev) { + for (auto *Tok = Prev->Previous; Tok && Tok->isPointerOrReference(); + Tok = Tok->Previous) { + Tok->setFinalizedType(TT_PointerOrReference); + } + } } + + if (Style.isJavaScript() && Prev && Prev->is(TT_JsTypeColon)) + Contexts.back().IsExpression = false; + if (Style.isTableGen()) Contexts.back().ColonIsDictLiteral = false; + else if (Style.isVerilog() && !(Prev && Prev->is(Keywords.kw_apostrophe))) + Contexts.back().VerilogMayBeConcatenation = true; unsigned CommaCount = 0; while (CurrentToken) { diff --git a/clang/unittests/Format/TokenAnnotatorTest.cpp b/clang/unittests/Format/TokenAnnotatorTest.cpp index 1884d41a5f23f5..e2c9ba01794caf 100644 --- a/clang/unittests/Format/TokenAnnotatorTest.cpp +++ b/clang/unittests/Format/TokenAnnotatorTest.cpp @@ -308,6 +308,11 @@ TEST_F(TokenAnnotatorTest, UnderstandsUsesOfStarAndAmp) { EXPECT_TOKEN(Tokens[3], tok::star, TT_PointerOrReference); EXPECT_TOKEN(Tokens[4], tok::amp, TT_PointerOrReference); + Tokens = annotate("if (Foo *&foo{a})"); + ASSERT_EQ(Tokens.size(), 11u) << Tokens; + EXPECT_TOKEN(Tokens[3], tok::star, TT_PointerOrReference); + EXPECT_TOKEN(Tokens[4], tok::amp, TT_PointerOrReference); + 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