diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp --- a/clang/lib/Format/Format.cpp +++ b/clang/lib/Format/Format.cpp @@ -658,7 +658,14 @@ IO.mapOptional("PackConstructorInitializers", Style.PackConstructorInitializers); - // For backward compatibility. + // For backward compatibility: + // The default value of ConstructorInitializerAllOnOneLineOrOnePerLine was + // false unless BasedOnStyle was Google or Chromium whereas that of + // AllowAllConstructorInitializersOnNextLine was always true, so the + // equivalent default value of PackConstructorInitializers is PCIS_NextLine + // for Google/Chromium or PCIS_BinPack otherwise. If the deprecated options + // had a non-default value while PackConstructorInitializers has a default + // value, set the latter to an equivalent non-default value if needed. StringRef BasedOn; IO.mapOptional("BasedOnStyle", BasedOn); const bool IsGoogleOrChromium = BasedOn.equals_insensitive("google") || @@ -668,17 +675,19 @@ IO.mapOptional("ConstructorInitializerAllOnOneLineOrOnePerLine", OnCurrentLine); IO.mapOptional("AllowAllConstructorInitializersOnNextLine", OnNextLine); - if (IsGoogleOrChromium && - Style.PackConstructorInitializers == FormatStyle::PCIS_NextLine) { + if (!IsGoogleOrChromium) { + if (Style.PackConstructorInitializers == FormatStyle::PCIS_BinPack && + OnCurrentLine) { + Style.PackConstructorInitializers = OnNextLine + ? FormatStyle::PCIS_NextLine + : FormatStyle::PCIS_CurrentLine; + } + } else if (Style.PackConstructorInitializers == + FormatStyle::PCIS_NextLine) { if (!OnCurrentLine) Style.PackConstructorInitializers = FormatStyle::PCIS_BinPack; else if (!OnNextLine) Style.PackConstructorInitializers = FormatStyle::PCIS_CurrentLine; - } else if (Style.PackConstructorInitializers == FormatStyle::PCIS_BinPack && - OnCurrentLine) { - Style.PackConstructorInitializers = OnNextLine - ? FormatStyle::PCIS_NextLine - : FormatStyle::PCIS_CurrentLine; } IO.mapOptional("FixNamespaceComments", Style.FixNamespaceComments); 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 @@ -18467,6 +18467,22 @@ PackConstructorInitializers, FormatStyle::PCIS_CurrentLine); CHECK_PARSE("PackConstructorInitializers: NextLine", PackConstructorInitializers, FormatStyle::PCIS_NextLine); + // For backward compatibility: + CHECK_PARSE("BasedOnStyle: Google\n" + "ConstructorInitializerAllOnOneLineOrOnePerLine: true\n" + "AllowAllConstructorInitializersOnNextLine: false", + PackConstructorInitializers, FormatStyle::PCIS_CurrentLine); + Style.PackConstructorInitializers = FormatStyle::PCIS_NextLine; + CHECK_PARSE("BasedOnStyle: Google\n" + "ConstructorInitializerAllOnOneLineOrOnePerLine: false", + PackConstructorInitializers, FormatStyle::PCIS_BinPack); + CHECK_PARSE("ConstructorInitializerAllOnOneLineOrOnePerLine: true\n" + "AllowAllConstructorInitializersOnNextLine: true", + PackConstructorInitializers, FormatStyle::PCIS_NextLine); + Style.PackConstructorInitializers = FormatStyle::PCIS_BinPack; + CHECK_PARSE("ConstructorInitializerAllOnOneLineOrOnePerLine: true\n" + "AllowAllConstructorInitializersOnNextLine: false", + PackConstructorInitializers, FormatStyle::PCIS_CurrentLine); Style.EmptyLineBeforeAccessModifier = FormatStyle::ELBAMS_LogicalBlock; CHECK_PARSE("EmptyLineBeforeAccessModifier: Never",