https://github.com/tJener updated https://github.com/llvm/llvm-project/pull/150361
>From 2c1a695bd602b45f68bdc97043ff2b144372230b Mon Sep 17 00:00:00 2001 From: Eric Li <li.zhe....@gmail.com> Date: Wed, 23 Jul 2025 22:18:05 -0400 Subject: [PATCH 1/2] [clang-format] Stop ctor initializer from being inlined The colon in a constructor's initializer list triggers the inlining of a nested block as if it was a conditional operator expression. This prevents line breaks under certain circumstances when the initializer list contains braced initializers, which in turn prevents the line formatter from finding a solution. In this commit we exclude colons that are a constructor initializer colon from consideration of nested block inlining. --- clang/lib/Format/ContinuationIndenter.cpp | 3 ++- clang/unittests/Format/FormatTest.cpp | 31 +++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index 4010f7fbd25be..83920ea492870 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -1724,7 +1724,8 @@ unsigned ContinuationIndenter::moveStateToNextToken(LineState &State, } if (Previous && (Previous->isOneOf(TT_BinaryOperator, TT_ConditionalExpr) || (Previous->isOneOf(tok::l_paren, tok::comma, tok::colon) && - !Previous->isOneOf(TT_DictLiteral, TT_ObjCMethodExpr)))) { + !Previous->isOneOf(TT_DictLiteral, TT_ObjCMethodExpr, + TT_CtorInitializerColon)))) { CurrentState.NestedBlockInlined = !Newline && hasNestedBlockInlined(Previous, Current, Style); } diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 944e7c3fb152a..75bdb9444bc45 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -7771,6 +7771,37 @@ TEST_F(FormatTest, ConstructorInitializers) { "Constructor() :\n" " // Comment forcing unwanted break.\n" " aaaa(aaaa) {}"); + + // Braced initializers with trailing commas. + verifyFormat("MyClass::MyClass()\n" + " : aaaa{\n" + " 0,\n" + " } {}", + "MyClass::MyClass():aaaa{0,}{}", getGoogleStyle()); + verifyFormat("MyClass::MyClass()\n" + " : aaaa(0),\n" + " bbbb{\n" + " 0,\n" + " } {}", + "MyClass::MyClass():aaaa(0),bbbb{0,}{}", getGoogleStyle()); + verifyFormat("MyClass::MyClass()\n" + " : aaaa(0),\n" + " bbbb{\n" + " 0,\n" + " },\n" + " cccc{\n" + " 0,\n" + " } {}", + "MyClass::MyClass():aaaa(0),bbbb{0,},cccc{0,}{}", + getGoogleStyle()); + verifyFormat("MyClass::MyClass()\n" + " : aaaa{\n" + " 0,\n" + " },\n" + " bbbb{\n" + " 0,\n" + " } {}", + "MyClass::MyClass():aaaa{0,},bbbb{0,}{}", getGoogleStyle()); } TEST_F(FormatTest, AllowAllConstructorInitializersOnNextLine) { >From 8c28f84f8c8a31356526fa37cca4a4bcdc7535da Mon Sep 17 00:00:00 2001 From: Eric Li <li.zhe....@gmail.com> Date: Thu, 24 Jul 2025 03:44:23 -0400 Subject: [PATCH 2/2] fixup --- clang/unittests/Format/FormatTest.cpp | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 75bdb9444bc45..0d086bb5290e1 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -7773,27 +7773,6 @@ TEST_F(FormatTest, ConstructorInitializers) { " aaaa(aaaa) {}"); // Braced initializers with trailing commas. - verifyFormat("MyClass::MyClass()\n" - " : aaaa{\n" - " 0,\n" - " } {}", - "MyClass::MyClass():aaaa{0,}{}", getGoogleStyle()); - verifyFormat("MyClass::MyClass()\n" - " : aaaa(0),\n" - " bbbb{\n" - " 0,\n" - " } {}", - "MyClass::MyClass():aaaa(0),bbbb{0,}{}", getGoogleStyle()); - verifyFormat("MyClass::MyClass()\n" - " : aaaa(0),\n" - " bbbb{\n" - " 0,\n" - " },\n" - " cccc{\n" - " 0,\n" - " } {}", - "MyClass::MyClass():aaaa(0),bbbb{0,},cccc{0,}{}", - getGoogleStyle()); verifyFormat("MyClass::MyClass()\n" " : aaaa{\n" " 0,\n" @@ -7801,7 +7780,7 @@ TEST_F(FormatTest, ConstructorInitializers) { " bbbb{\n" " 0,\n" " } {}", - "MyClass::MyClass():aaaa{0,},bbbb{0,}{}", getGoogleStyle()); + "MyClass::MyClass():aaaa{0,},bbbb{0,}{}"); } TEST_F(FormatTest, AllowAllConstructorInitializersOnNextLine) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits