https://github.com/llvmbot created https://github.com/llvm/llvm-project/pull/136238
Backport b8734797a3f605c4aaa37fcb5007baa273565460 Requested by: @owenca >From b51a65f8d0ffb7c547fcc514c3ae686adcbf5b6a Mon Sep 17 00:00:00 2001 From: Gedare Bloom <ged...@rtems.org> Date: Thu, 30 Jan 2025 20:38:43 -0700 Subject: [PATCH] [clang-format] Fix mismatched break in BlockIndent (#124998) Near the ColumnLimit a break could be inserted before a right parens with BlockIndent without a break after the matching left parens. Avoid these hanging right parens by disallowing breaks before right parens unless there was a break after the left parens. Fixes #103306 (cherry picked from commit b8734797a3f605c4aaa37fcb5007baa273565460) --- clang/lib/Format/ContinuationIndenter.cpp | 7 +++++++ clang/unittests/Format/FormatTest.cpp | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index c311deaa17bb0..6f7d213c0b559 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -349,6 +349,13 @@ bool ContinuationIndenter::canBreak(const LineState &State) { } } + // Allow breaking before the right parens with block indentation if there was + // a break after the left parens, which is tracked by BreakBeforeClosingParen. + if (Style.AlignAfterOpenBracket == FormatStyle::BAS_BlockIndent && + Current.is(tok::r_paren)) { + return CurrentState.BreakBeforeClosingParen; + } + // Don't allow breaking before a closing brace of a block-indented braced list // initializer if there isn't already a break. if (Current.is(tok::r_brace) && Current.MatchingParen && diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 44341fbfe895f..bf3eff129efd5 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -9614,6 +9614,10 @@ TEST_F(FormatTest, AlignsAfterOpenBracket) { " auto aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n" " ) {};", Style); + verifyFormat("aaaaaaaaaaaaaaaaaaaaaaaa(\n" + " &bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n" + ");", + Style); } TEST_F(FormatTest, ParenthesesAndOperandAlignment) { _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits