diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -1190,6 +1190,10 @@ break; } } + if (NextNonComment->isOneOf(TT_CtorInitializerColon, TT_InheritanceColon, + TT_InheritanceComma)) { + return State.FirstIndent + Style.ConstructorInitializerIndentWidth; + } if ((PreviousNonComment && (PreviousNonComment->ClosesTemplateDeclaration || PreviousNonComment->ClosesRequiresClause || @@ -1264,10 +1268,6 @@ Style.BreakInheritanceList == FormatStyle::BILS_AfterColon) { return CurrentState.Indent; } - if (NextNonComment->isOneOf(TT_CtorInitializerColon, TT_InheritanceColon, - TT_InheritanceComma)) { - return State.FirstIndent + Style.ConstructorInitializerIndentWidth; - } if (Previous.is(tok::r_paren) && !Current.isBinaryOperator() && !Current.isOneOf(tok::colon, tok::comment)) { return ContinuationIndent; diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -24714,6 +24714,18 @@ "struct S {};", Style); + Style = getLLVMStyle(); + Style.ConstructorInitializerIndentWidth = 4; + Style.BreakConstructorInitializers = FormatStyle::BCIS_BeforeColon; + Style.PackConstructorInitializers = FormatStyle::PCIS_Never; + verifyFormat("constexpr Foo(Foo const &other)\n" + " requires std::is_copy_constructible\n" + " : value{other.value} {\n" + " do_magic();\n" + " do_more_magic();\n" + "}", + Style); + // Not a clause, but we once hit an assert. verifyFormat("#if 0\n" "#else\n"