diff --git a/clang/lib/Format/WhitespaceManager.cpp b/clang/lib/Format/WhitespaceManager.cpp index 673af51d2daae..f20383800ab43 100644 --- a/clang/lib/Format/WhitespaceManager.cpp +++ b/clang/lib/Format/WhitespaceManager.cpp @@ -371,6 +371,9 @@ AlignTokenSequence(const FormatStyle &Style, unsigned Start, unsigned End, return false; if (Changes[ScopeStart].NewlinesBefore > 0) return false; + if (Changes[i].Tok->is(tok::l_brace) && + Changes[i].Tok->is(BK_BracedInit)) + return true; return Style.BinPackArguments; } @@ -387,6 +390,14 @@ AlignTokenSequence(const FormatStyle &Style, unsigned Start, unsigned End, Changes[i].Tok->Previous->is(TT_ConditionalExpr)) return true; + // Continued direct-list-initialization using braced list. + if (ScopeStart > Start + 1 && + Changes[ScopeStart - 2].Tok->is(tok::identifier) && + Changes[ScopeStart - 1].Tok->is(tok::l_brace) && + Changes[i].Tok->is(tok::l_brace) && + Changes[i].Tok->is(BK_BracedInit)) + return true; + // Continued braced list. if (ScopeStart > Start + 1 && Changes[ScopeStart - 2].Tok->isNot(tok::identifier) && diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 44da34001f990..22c46a129403b 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -17318,6 +17318,23 @@ TEST_F(FormatTest, AlignConsecutiveAssignments) { // " ccc ? aaaaa : bbbbb,\n" // " dddddddddddddddddddddddddd);", // Alignment); + + // Confirm proper handling of AlignConsecutiveAssignments with + // BinPackArguments. + // See https://llvm.org/PR55360 + Alignment = getLLVMStyleWithColumns(50); + Alignment.AlignConsecutiveAssignments.Enabled = true; + Alignment.BinPackArguments = false; + verifyFormat("int a_long_name = 1;\n" + "auto b = B({a_long_name, a_long_name},\n" + " {a_longer_name_for_wrap,\n" + " a_longer_name_for_wrap});", + Alignment); + verifyFormat("int a_long_name = 1;\n" + "auto b = B{{a_long_name, a_long_name},\n" + " {a_longer_name_for_wrap,\n" + " a_longer_name_for_wrap}};", + Alignment); } TEST_F(FormatTest, AlignConsecutiveBitFields) {