https://github.com/Ezlanding1 updated 
https://github.com/llvm/llvm-project/pull/180109

>From c9f48b69a2be9f59e4526f7807a5521d0ff8a7b2 Mon Sep 17 00:00:00 2001
From: Ezlanding1 <[email protected]>
Date: Thu, 5 Feb 2026 21:10:54 -0500
Subject: [PATCH 1/3] Update goto label indentation styles

---
 clang/docs/ClangFormatStyleOptions.rst      | 73 +++++++++++++++++----
 clang/include/clang/Format/Format.h         | 72 +++++++++++++++-----
 clang/lib/Format/Format.cpp                 | 14 +++-
 clang/lib/Format/UnwrappedLineFormatter.cpp |  7 ++
 clang/lib/Format/UnwrappedLineParser.cpp    | 20 ++++--
 clang/lib/Format/UnwrappedLineParser.h      |  3 +-
 6 files changed, 153 insertions(+), 36 deletions(-)

diff --git a/clang/docs/ClangFormatStyleOptions.rst 
b/clang/docs/ClangFormatStyleOptions.rst
index 5ba117c231ad5..4ef93f08562ac 100644
--- a/clang/docs/ClangFormatStyleOptions.rst
+++ b/clang/docs/ClangFormatStyleOptions.rst
@@ -4535,22 +4535,69 @@ the configuration (without a prefix: ``Auto``).
 
 .. _IndentGotoLabels:
 
-**IndentGotoLabels** (``Boolean``) :versionbadge:`clang-format 10` :ref:`¶ 
<IndentGotoLabels>`
-  Indent goto labels.
+**IndentGotoLabels** (``IndentGotoLabelStyle``) :versionbadge:`clang-format 
23` :ref:`¶ <IndentGotoLabels>`
+  The goto label indenting style to use.
 
-  When ``false``, goto labels are flushed left.
+  Possible values:
+
+  * ``IGLS_LeftAlign`` (in configuration: ``LeftAlign``)
+    Left align goto labels.
+
+    .. code-block:: c++
+
+       int f() {
+         if (foo()) {
+       label1:
+           bar();
+         }
+       label2:
+         return 1;
+       }
+
+  * ``IGLS_NoIndent`` (in configuration: ``NoIndent``)
+    Do not indent goto labels.
+
+    .. code-block:: c++
+
+       int f() {
+         if (foo()) {
+         label1:
+           bar();
+         }
+       label2:
+         return 1;
+       }
+
+  * ``IGLS_Indent`` (in configuration: ``Indent``)
+    Indent goto labels.
+
+    .. code-block:: c++
+
+       int f() {
+         if (foo()) {
+           label1:
+           bar();
+         }
+         label2:
+         return 1;
+       }
+
+  * ``IGLS_HalfIndent`` (in configuration: ``HalfIndent``)
+    Indent goto labels to half the indentation of the surrounding code.
+    If the indentation width is not an even number, it will round up.
+
+    .. code-block:: c++
+
+       int f() {
+         if (foo()) {
+          label1:
+           bar();
+         }
+        label2:
+         return 1;
+       }
 
-  .. code-block:: c++
 
-     true:                                  false:
-     int f() {                      vs.     int f() {
-       if (foo()) {                           if (foo()) {
-       label1:                              label1:
-         bar();                                 bar();
-       }                                      }
-     label2:                                label2:
-       return 1;                              return 1;
-     }                                      }
 
 .. _IndentPPDirectives:
 
diff --git a/clang/include/clang/Format/Format.h 
b/clang/include/clang/Format/Format.h
index 43bea4b80cb8a..a1314d56f6949 100644
--- a/clang/include/clang/Format/Format.h
+++ b/clang/include/clang/Format/Format.h
@@ -3078,22 +3078,62 @@ struct FormatStyle {
   /// \version 11
   IndentExternBlockStyle IndentExternBlock;
 
-  /// Indent goto labels.
-  ///
-  /// When ``false``, goto labels are flushed left.
-  /// \code
-  ///    true:                                  false:
-  ///    int f() {                      vs.     int f() {
-  ///      if (foo()) {                           if (foo()) {
-  ///      label1:                              label1:
-  ///        bar();                                 bar();
-  ///      }                                      }
-  ///    label2:                                label2:
-  ///      return 1;                              return 1;
-  ///    }                                      }
-  /// \endcode
-  /// \version 10
-  bool IndentGotoLabels;
+  /// Options for indenting goto labels.
+  enum IndentGotoLabelStyle : int8_t {
+    /// Left align goto labels.
+    /// \code
+    ///    int f() {
+    ///      if (foo()) {
+    ///    label1:
+    ///        bar();
+    ///      }
+    ///    label2:
+    ///      return 1;
+    ///    }
+    /// \endcode
+    IGLS_LeftAlign,
+    /// Do not indent goto labels.
+    /// \code
+    ///    int f() {
+    ///      if (foo()) {
+    ///      label1:
+    ///        bar();
+    ///      }
+    ///    label2:
+    ///      return 1;
+    ///    }
+    /// \endcode
+    IGLS_NoIndent,
+    /// Indent goto labels.
+    /// \code
+    ///    int f() {
+    ///      if (foo()) {
+    ///        label1:
+    ///        bar();
+    ///      }
+    ///      label2:
+    ///      return 1;
+    ///    }
+    /// \endcode
+    IGLS_Indent,
+    /// Indent goto labels to half the indentation of the surrounding code.
+    /// If the indentation width is not an even number, it will round up.
+    /// \code
+    ///    int f() {
+    ///      if (foo()) {
+    ///       label1:
+    ///        bar();
+    ///      }
+    ///     label2:
+    ///      return 1;
+    ///    }
+    /// \endcode
+    IGLS_HalfIndent,
+  };
+
+  /// The goto label indenting style to use.
+  /// \version 23
+  IndentGotoLabelStyle IndentGotoLabels;
 
   /// Options for indenting preprocessor directives.
   enum PPDirectiveIndentStyle : int8_t {
diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp
index 1e68de531791f..0abfd534631cb 100644
--- a/clang/lib/Format/Format.cpp
+++ b/clang/lib/Format/Format.cpp
@@ -1465,6 +1465,18 @@ template <> struct 
DocumentListTraits<std::vector<FormatStyle>> {
     return Seq[Index];
   }
 };
+
+template <> struct ScalarEnumerationTraits<FormatStyle::IndentGotoLabelStyle> {
+  static void enumeration(IO &IO, FormatStyle::IndentGotoLabelStyle &Value) {
+    IO.enumCase(Value, "LeftAlign", FormatStyle::IGLS_LeftAlign);
+    IO.enumCase(Value, "NoIndent", FormatStyle::IGLS_NoIndent);
+    IO.enumCase(Value, "Indent", FormatStyle::IGLS_Indent);
+    IO.enumCase(Value, "HalfIndent", FormatStyle::IGLS_HalfIndent);
+    IO.enumCase(Value, "false", FormatStyle::IGLS_LeftAlign);
+    IO.enumCase(Value, "true", FormatStyle::IGLS_NoIndent);
+  }
+};
+
 } // namespace yaml
 } // namespace llvm
 
@@ -1759,7 +1771,7 @@ FormatStyle getLLVMStyle(FormatStyle::LanguageKind 
Language) {
   LLVMStyle.IndentCaseLabels = false;
   LLVMStyle.IndentExportBlock = true;
   LLVMStyle.IndentExternBlock = FormatStyle::IEBS_AfterExternBlock;
-  LLVMStyle.IndentGotoLabels = true;
+  LLVMStyle.IndentGotoLabels = FormatStyle::IGLS_NoIndent;
   LLVMStyle.IndentPPDirectives = FormatStyle::PPDIS_None;
   LLVMStyle.IndentRequiresClause = true;
   LLVMStyle.IndentWidth = 2;
diff --git a/clang/lib/Format/UnwrappedLineFormatter.cpp 
b/clang/lib/Format/UnwrappedLineFormatter.cpp
index 8589aa83f6c55..552038d1e0753 100644
--- a/clang/lib/Format/UnwrappedLineFormatter.cpp
+++ b/clang/lib/Format/UnwrappedLineFormatter.cpp
@@ -120,7 +120,14 @@ class LevelIndentTracker {
   int getIndentOffset(const AnnotatedLine &Line) {
     if (Style.isJava() || Style.isJavaScript() || Style.isCSharp())
       return 0;
+
     const auto &RootToken = *Line.First;
+
+    if (Style.IndentGotoLabels == FormatStyle::IGLS_HalfIndent &&
+        RootToken.Next != NULL && RootToken.Next->is(TT_GotoLabelColon)) {
+      return -static_cast<int>(Style.IndentWidth / 2);
+    }
+
     if (Line.Type == LT_AccessModifier ||
         RootToken.isAccessSpecifier(/*ColonRequired=*/false) ||
         RootToken.isObjCAccessSpecifier() ||
diff --git a/clang/lib/Format/UnwrappedLineParser.cpp 
b/clang/lib/Format/UnwrappedLineParser.cpp
index f57ef1328eac7..14e72ffdd8aa7 100644
--- a/clang/lib/Format/UnwrappedLineParser.cpp
+++ b/clang/lib/Format/UnwrappedLineParser.cpp
@@ -1710,7 +1710,7 @@ void UnwrappedLineParser::parseStructuralElement(
       if (!Line->InMacroBody || CurrentLines->size() > 1)
         Line->Tokens.begin()->Tok->MustBreakBefore = true;
       FormatTok->setFinalizedType(TT_GotoLabelColon);
-      parseLabel(!Style.IndentGotoLabels);
+      parseLabel(Style.IndentGotoLabels);
       if (HasLabel)
         *HasLabel = true;
       return;
@@ -3354,14 +3354,24 @@ void UnwrappedLineParser::parseDoWhile() {
   parseStructuralElement();
 }
 
-void UnwrappedLineParser::parseLabel(bool LeftAlignLabel) {
+void UnwrappedLineParser::parseLabel(
+    FormatStyle::IndentGotoLabelStyle IndentGotoLabels) {
   nextToken();
   unsigned OldLineLevel = Line->Level;
 
-  if (LeftAlignLabel)
+  switch (IndentGotoLabels) {
+  case FormatStyle::IGLS_LeftAlign:
     Line->Level = 0;
-  else if (Line->Level > 1 || (!Line->InPPDirective && Line->Level > 0))
-    --Line->Level;
+    break;
+  case FormatStyle::IGLS_NoIndent:
+    if (Line->Level > 1 || (!Line->InPPDirective && Line->Level > 0))
+      --Line->Level;
+    break;
+  case FormatStyle::IGLS_HalfIndent:
+  case FormatStyle::IGLS_Indent:
+  default:
+    break;
+  }
 
   if (!Style.IndentCaseBlocks && CommentsBeforeNextToken.empty() &&
       FormatTok->is(tok::l_brace)) {
diff --git a/clang/lib/Format/UnwrappedLineParser.h 
b/clang/lib/Format/UnwrappedLineParser.h
index 86022d9b316c6..48119e8802b57 100644
--- a/clang/lib/Format/UnwrappedLineParser.h
+++ b/clang/lib/Format/UnwrappedLineParser.h
@@ -159,7 +159,8 @@ class UnwrappedLineParser {
   void parseLoopBody(bool KeepBraces, bool WrapRightBrace);
   void parseForOrWhileLoop(bool HasParens = true);
   void parseDoWhile();
-  void parseLabel(bool LeftAlignLabel = false);
+  void parseLabel(FormatStyle::IndentGotoLabelStyle IndentGotoLabels =
+                      FormatStyle::IGLS_NoIndent);
   void parseCaseLabel();
   void parseSwitch(bool IsExpr);
   void parseNamespace();

>From 1dd860a8dd319b82382cf2eb841e2493d20a840e Mon Sep 17 00:00:00 2001
From: Ezlanding1 <[email protected]>
Date: Wed, 11 Feb 2026 01:51:23 -0500
Subject: [PATCH 2/3] Add unit tests

---
 clang/unittests/Format/ConfigParseTest.cpp | 15 ++++++-
 clang/unittests/Format/FormatTest.cpp      | 47 +++++++++++++++++++++-
 2 files changed, 60 insertions(+), 2 deletions(-)

diff --git a/clang/unittests/Format/ConfigParseTest.cpp 
b/clang/unittests/Format/ConfigParseTest.cpp
index 0a116b770f52a..d958b0d128456 100644
--- a/clang/unittests/Format/ConfigParseTest.cpp
+++ b/clang/unittests/Format/ConfigParseTest.cpp
@@ -193,7 +193,6 @@ TEST(ConfigParseTest, ParsesConfigurationBools) {
   CHECK_PARSE_BOOL(IndentCaseBlocks);
   CHECK_PARSE_BOOL(IndentCaseLabels);
   CHECK_PARSE_BOOL(IndentExportBlock);
-  CHECK_PARSE_BOOL(IndentGotoLabels);
   CHECK_PARSE_BOOL(IndentRequiresClause);
   CHECK_PARSE_BOOL_FIELD(IndentRequiresClause, "IndentRequires");
   CHECK_PARSE_BOOL(IndentWrappedFunctionNames);
@@ -892,6 +891,20 @@ TEST(ConfigParseTest, ParsesConfiguration) {
   CHECK_PARSE("IndentExternBlock: false", IndentExternBlock,
               FormatStyle::IEBS_NoIndent);
 
+  Style.IndentGotoLabels = FormatStyle::IGLS_NoIndent;
+  CHECK_PARSE("IndentGotoLabels: LeftAlign", IndentGotoLabels,
+              FormatStyle::IGLS_LeftAlign);
+  CHECK_PARSE("IndentGotoLabels: NoIndent", IndentGotoLabels,
+              FormatStyle::IGLS_NoIndent);
+  CHECK_PARSE("IndentGotoLabels: Indent", IndentGotoLabels,
+              FormatStyle::IGLS_Indent);
+  CHECK_PARSE("IndentGotoLabels: HalfIndent", IndentGotoLabels,
+              FormatStyle::IGLS_HalfIndent);
+  CHECK_PARSE("IndentGotoLabels: false", IndentGotoLabels,
+              FormatStyle::IGLS_LeftAlign);
+  CHECK_PARSE("IndentGotoLabels: true", IndentGotoLabels,
+              FormatStyle::IGLS_NoIndent);
+
   Style.BitFieldColonSpacing = FormatStyle::BFCS_None;
   CHECK_PARSE("BitFieldColonSpacing: Both", BitFieldColonSpacing,
               FormatStyle::BFCS_Both);
diff --git a/clang/unittests/Format/FormatTest.cpp 
b/clang/unittests/Format/FormatTest.cpp
index 33836e28289b4..23e68fd41c588 100644
--- a/clang/unittests/Format/FormatTest.cpp
+++ b/clang/unittests/Format/FormatTest.cpp
@@ -3158,7 +3158,7 @@ TEST_F(FormatTest, FormatsLabels) {
                "}");
 
   FormatStyle Style = getLLVMStyle();
-  Style.IndentGotoLabels = false;
+  Style.IndentGotoLabels = FormatStyle::IGLS_LeftAlign;
   verifyFormat("void f() {\n"
                "  some_code();\n"
                "test_label:\n"
@@ -3196,6 +3196,51 @@ TEST_F(FormatTest, FormatsLabels) {
                "  }\n"
                "}",
                Style);
+  Style.IndentGotoLabels = FormatStyle::IGLS_NoIndent;
+  verifyFormat("void f() {\n"
+               "  some_code();\n"
+               "test_label:\n"
+               "  some_other_code();\n"
+               "  {\n"
+               "    some_more_code();\n"
+               "  another_label:\n"
+               "    some_more_code();\n"
+               "  }\n"
+               "}",
+               Style);
+  Style.IndentGotoLabels = FormatStyle::IGLS_Indent;
+  verifyFormat("void f() {\n"
+               "  some_code();\n"
+               "  test_label:\n"
+               "  some_other_code();\n"
+               "  {\n"
+               "    some_more_code();\n"
+               "    another_label:\n"
+               "    some_more_code();\n"
+               "  }\n"
+               "}",
+               Style);
+  Style.IndentGotoLabels = FormatStyle::IGLS_HalfIndent;
+  verifyFormat("void f() {\n"
+               "  some_code();\n"
+               " test_label:\n"
+               "  some_other_code();\n"
+               "  {\n"
+               "    some_more_code();\n"
+               "   another_label:\n"
+               "    some_more_code();\n"
+               "  }\n"
+               "}",
+               Style);
+  Style.IndentWidth = 3;
+  verifyFormat("void f() {\n"
+               "   some_code();\n"
+               "  test_label:\n"
+               "   some_other_code();\n"
+               "}",
+               Style);
+  Style.IndentWidth = 2;
+  Style.IndentGotoLabels = FormatStyle::IGLS_LeftAlign;
 
   Style.ColumnLimit = 15;
   verifyFormat("#define FOO   \\\n"

>From ef973af00b8c9aac289df74d86311602058c346f Mon Sep 17 00:00:00 2001
From: Ezlanding1 <[email protected]>
Date: Wed, 11 Feb 2026 16:46:16 -0500
Subject: [PATCH 3/3] Fix according to code review

---
 clang/docs/ClangFormatStyleOptions.rst      | 17 ++---
 clang/include/clang/Format/Format.h         | 17 ++---
 clang/lib/Format/Format.cpp                 | 12 ++--
 clang/lib/Format/UnwrappedLineFormatter.cpp |  2 +-
 clang/lib/Format/UnwrappedLineParser.cpp    |  7 +-
 clang/lib/Format/UnwrappedLineParser.h      |  2 +-
 clang/unittests/Format/ConfigParseTest.cpp  | 14 ++--
 clang/unittests/Format/FormatTest.cpp       | 72 +++++++++++++++++++--
 8 files changed, 105 insertions(+), 38 deletions(-)

diff --git a/clang/docs/ClangFormatStyleOptions.rst 
b/clang/docs/ClangFormatStyleOptions.rst
index 4ef93f08562ac..485212af32e03 100644
--- a/clang/docs/ClangFormatStyleOptions.rst
+++ b/clang/docs/ClangFormatStyleOptions.rst
@@ -4535,13 +4535,13 @@ the configuration (without a prefix: ``Auto``).
 
 .. _IndentGotoLabels:
 
-**IndentGotoLabels** (``IndentGotoLabelStyle``) :versionbadge:`clang-format 
23` :ref:`¶ <IndentGotoLabels>`
+**IndentGotoLabels** (``IndentGotoLabelStyle``) :versionbadge:`clang-format 
10` :ref:`¶ <IndentGotoLabels>`
   The goto label indenting style to use.
 
   Possible values:
 
-  * ``IGLS_LeftAlign`` (in configuration: ``LeftAlign``)
-    Left align goto labels.
+  * ``IGLS_NoIndent`` (in configuration: ``NoIndent``)
+    Do not indent goto labels.
 
     .. code-block:: c++
 
@@ -4554,8 +4554,8 @@ the configuration (without a prefix: ``Auto``).
          return 1;
        }
 
-  * ``IGLS_NoIndent`` (in configuration: ``NoIndent``)
-    Do not indent goto labels.
+  * ``IGLS_OuterIndent`` (in configuration: ``OuterIndent``)
+    Indent goto labels to the enclosing block (previous indenting level).
 
     .. code-block:: c++
 
@@ -4568,8 +4568,9 @@ the configuration (without a prefix: ``Auto``).
          return 1;
        }
 
-  * ``IGLS_Indent`` (in configuration: ``Indent``)
-    Indent goto labels.
+  * ``IGLS_InnerIndent`` (in configuration: ``InnerIndent``)
+    Indent goto labels to the surrounding statements (current indenting
+    level).
 
     .. code-block:: c++
 
@@ -4584,7 +4585,7 @@ the configuration (without a prefix: ``Auto``).
 
   * ``IGLS_HalfIndent`` (in configuration: ``HalfIndent``)
     Indent goto labels to half the indentation of the surrounding code.
-    If the indentation width is not an even number, it will round up.
+    If the indentation width is an odd number, it will round up.
 
     .. code-block:: c++
 
diff --git a/clang/include/clang/Format/Format.h 
b/clang/include/clang/Format/Format.h
index a1314d56f6949..2ef95b2f68e52 100644
--- a/clang/include/clang/Format/Format.h
+++ b/clang/include/clang/Format/Format.h
@@ -3080,7 +3080,7 @@ struct FormatStyle {
 
   /// Options for indenting goto labels.
   enum IndentGotoLabelStyle : int8_t {
-    /// Left align goto labels.
+    /// Do not indent goto labels.
     /// \code
     ///    int f() {
     ///      if (foo()) {
@@ -3091,8 +3091,8 @@ struct FormatStyle {
     ///      return 1;
     ///    }
     /// \endcode
-    IGLS_LeftAlign,
-    /// Do not indent goto labels.
+    IGLS_NoIndent,
+    /// Indent goto labels to the enclosing block (previous indenting level).
     /// \code
     ///    int f() {
     ///      if (foo()) {
@@ -3103,8 +3103,9 @@ struct FormatStyle {
     ///      return 1;
     ///    }
     /// \endcode
-    IGLS_NoIndent,
-    /// Indent goto labels.
+    IGLS_OuterIndent,
+    /// Indent goto labels to the surrounding statements (current indenting
+    /// level).
     /// \code
     ///    int f() {
     ///      if (foo()) {
@@ -3115,9 +3116,9 @@ struct FormatStyle {
     ///      return 1;
     ///    }
     /// \endcode
-    IGLS_Indent,
+    IGLS_InnerIndent,
     /// Indent goto labels to half the indentation of the surrounding code.
-    /// If the indentation width is not an even number, it will round up.
+    /// If the indentation width is an odd number, it will round up.
     /// \code
     ///    int f() {
     ///      if (foo()) {
@@ -3132,7 +3133,7 @@ struct FormatStyle {
   };
 
   /// The goto label indenting style to use.
-  /// \version 23
+  /// \version 10
   IndentGotoLabelStyle IndentGotoLabels;
 
   /// Options for indenting preprocessor directives.
diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp
index 0abfd534631cb..16f0bfe6485d2 100644
--- a/clang/lib/Format/Format.cpp
+++ b/clang/lib/Format/Format.cpp
@@ -1468,12 +1468,14 @@ template <> struct 
DocumentListTraits<std::vector<FormatStyle>> {
 
 template <> struct ScalarEnumerationTraits<FormatStyle::IndentGotoLabelStyle> {
   static void enumeration(IO &IO, FormatStyle::IndentGotoLabelStyle &Value) {
-    IO.enumCase(Value, "LeftAlign", FormatStyle::IGLS_LeftAlign);
     IO.enumCase(Value, "NoIndent", FormatStyle::IGLS_NoIndent);
-    IO.enumCase(Value, "Indent", FormatStyle::IGLS_Indent);
+    IO.enumCase(Value, "OuterIndent", FormatStyle::IGLS_OuterIndent);
+    IO.enumCase(Value, "InnerIndent", FormatStyle::IGLS_InnerIndent);
     IO.enumCase(Value, "HalfIndent", FormatStyle::IGLS_HalfIndent);
-    IO.enumCase(Value, "false", FormatStyle::IGLS_LeftAlign);
-    IO.enumCase(Value, "true", FormatStyle::IGLS_NoIndent);
+
+    // For backward compatibility.
+    IO.enumCase(Value, "false", FormatStyle::IGLS_NoIndent);
+    IO.enumCase(Value, "true", FormatStyle::IGLS_OuterIndent);
   }
 };
 
@@ -1771,7 +1773,7 @@ FormatStyle getLLVMStyle(FormatStyle::LanguageKind 
Language) {
   LLVMStyle.IndentCaseLabels = false;
   LLVMStyle.IndentExportBlock = true;
   LLVMStyle.IndentExternBlock = FormatStyle::IEBS_AfterExternBlock;
-  LLVMStyle.IndentGotoLabels = FormatStyle::IGLS_NoIndent;
+  LLVMStyle.IndentGotoLabels = FormatStyle::IGLS_OuterIndent;
   LLVMStyle.IndentPPDirectives = FormatStyle::PPDIS_None;
   LLVMStyle.IndentRequiresClause = true;
   LLVMStyle.IndentWidth = 2;
diff --git a/clang/lib/Format/UnwrappedLineFormatter.cpp 
b/clang/lib/Format/UnwrappedLineFormatter.cpp
index 552038d1e0753..74c0f4bf75721 100644
--- a/clang/lib/Format/UnwrappedLineFormatter.cpp
+++ b/clang/lib/Format/UnwrappedLineFormatter.cpp
@@ -124,7 +124,7 @@ class LevelIndentTracker {
     const auto &RootToken = *Line.First;
 
     if (Style.IndentGotoLabels == FormatStyle::IGLS_HalfIndent &&
-        RootToken.Next != NULL && RootToken.Next->is(TT_GotoLabelColon)) {
+        RootToken.Next && RootToken.Next->is(TT_GotoLabelColon)) {
       return -static_cast<int>(Style.IndentWidth / 2);
     }
 
diff --git a/clang/lib/Format/UnwrappedLineParser.cpp 
b/clang/lib/Format/UnwrappedLineParser.cpp
index 14e72ffdd8aa7..c11b51f8ec0a4 100644
--- a/clang/lib/Format/UnwrappedLineParser.cpp
+++ b/clang/lib/Format/UnwrappedLineParser.cpp
@@ -3360,16 +3360,15 @@ void UnwrappedLineParser::parseLabel(
   unsigned OldLineLevel = Line->Level;
 
   switch (IndentGotoLabels) {
-  case FormatStyle::IGLS_LeftAlign:
+  case FormatStyle::IGLS_NoIndent:
     Line->Level = 0;
     break;
-  case FormatStyle::IGLS_NoIndent:
+  case FormatStyle::IGLS_OuterIndent:
     if (Line->Level > 1 || (!Line->InPPDirective && Line->Level > 0))
       --Line->Level;
     break;
   case FormatStyle::IGLS_HalfIndent:
-  case FormatStyle::IGLS_Indent:
-  default:
+  case FormatStyle::IGLS_InnerIndent:
     break;
   }
 
diff --git a/clang/lib/Format/UnwrappedLineParser.h 
b/clang/lib/Format/UnwrappedLineParser.h
index 48119e8802b57..f3c1b70147db8 100644
--- a/clang/lib/Format/UnwrappedLineParser.h
+++ b/clang/lib/Format/UnwrappedLineParser.h
@@ -160,7 +160,7 @@ class UnwrappedLineParser {
   void parseForOrWhileLoop(bool HasParens = true);
   void parseDoWhile();
   void parseLabel(FormatStyle::IndentGotoLabelStyle IndentGotoLabels =
-                      FormatStyle::IGLS_NoIndent);
+                      FormatStyle::IGLS_OuterIndent);
   void parseCaseLabel();
   void parseSwitch(bool IsExpr);
   void parseNamespace();
diff --git a/clang/unittests/Format/ConfigParseTest.cpp 
b/clang/unittests/Format/ConfigParseTest.cpp
index d958b0d128456..a23969fc2b921 100644
--- a/clang/unittests/Format/ConfigParseTest.cpp
+++ b/clang/unittests/Format/ConfigParseTest.cpp
@@ -891,19 +891,19 @@ TEST(ConfigParseTest, ParsesConfiguration) {
   CHECK_PARSE("IndentExternBlock: false", IndentExternBlock,
               FormatStyle::IEBS_NoIndent);
 
-  Style.IndentGotoLabels = FormatStyle::IGLS_NoIndent;
-  CHECK_PARSE("IndentGotoLabels: LeftAlign", IndentGotoLabels,
-              FormatStyle::IGLS_LeftAlign);
+  Style.IndentGotoLabels = FormatStyle::IGLS_OuterIndent;
   CHECK_PARSE("IndentGotoLabels: NoIndent", IndentGotoLabels,
               FormatStyle::IGLS_NoIndent);
-  CHECK_PARSE("IndentGotoLabels: Indent", IndentGotoLabels,
-              FormatStyle::IGLS_Indent);
+  CHECK_PARSE("IndentGotoLabels: OuterIndent", IndentGotoLabels,
+              FormatStyle::IGLS_OuterIndent);
+  CHECK_PARSE("IndentGotoLabels: InnerIndent", IndentGotoLabels,
+              FormatStyle::IGLS_InnerIndent);
   CHECK_PARSE("IndentGotoLabels: HalfIndent", IndentGotoLabels,
               FormatStyle::IGLS_HalfIndent);
   CHECK_PARSE("IndentGotoLabels: false", IndentGotoLabels,
-              FormatStyle::IGLS_LeftAlign);
-  CHECK_PARSE("IndentGotoLabels: true", IndentGotoLabels,
               FormatStyle::IGLS_NoIndent);
+  CHECK_PARSE("IndentGotoLabels: true", IndentGotoLabels,
+              FormatStyle::IGLS_OuterIndent);
 
   Style.BitFieldColonSpacing = FormatStyle::BFCS_None;
   CHECK_PARSE("BitFieldColonSpacing: Both", BitFieldColonSpacing,
diff --git a/clang/unittests/Format/FormatTest.cpp 
b/clang/unittests/Format/FormatTest.cpp
index 23e68fd41c588..036f18bd25894 100644
--- a/clang/unittests/Format/FormatTest.cpp
+++ b/clang/unittests/Format/FormatTest.cpp
@@ -3158,7 +3158,7 @@ TEST_F(FormatTest, FormatsLabels) {
                "}");
 
   FormatStyle Style = getLLVMStyle();
-  Style.IndentGotoLabels = FormatStyle::IGLS_LeftAlign;
+  Style.IndentGotoLabels = FormatStyle::IGLS_NoIndent;
   verifyFormat("void f() {\n"
                "  some_code();\n"
                "test_label:\n"
@@ -3196,7 +3196,23 @@ TEST_F(FormatTest, FormatsLabels) {
                "  }\n"
                "}",
                Style);
-  Style.IndentGotoLabels = FormatStyle::IGLS_NoIndent;
+  verifyFormat("void f() {\n"
+               "L1:\n"
+               "  a();\n"
+               "  {\n"
+               "L2:\n"
+               "    b();\n"
+               "    {\n"
+               "L3:\n"
+               "      c();\n"
+               "      {\n"
+               "L4:\n"
+               "      }\n"
+               "    }\n"
+               "  }\n"
+               "}",
+               Style);
+  Style.IndentGotoLabels = FormatStyle::IGLS_OuterIndent;
   verifyFormat("void f() {\n"
                "  some_code();\n"
                "test_label:\n"
@@ -3208,7 +3224,23 @@ TEST_F(FormatTest, FormatsLabels) {
                "  }\n"
                "}",
                Style);
-  Style.IndentGotoLabels = FormatStyle::IGLS_Indent;
+  verifyFormat("void f() {\n"
+               "L1:\n"
+               "  a();\n"
+               "  {\n"
+               "  L2:\n"
+               "    b();\n"
+               "    {\n"
+               "    L3:\n"
+               "      c();\n"
+               "      {\n"
+               "      L4:\n"
+               "      }\n"
+               "    }\n"
+               "  }\n"
+               "}",
+               Style);
+  Style.IndentGotoLabels = FormatStyle::IGLS_InnerIndent;
   verifyFormat("void f() {\n"
                "  some_code();\n"
                "  test_label:\n"
@@ -3220,6 +3252,22 @@ TEST_F(FormatTest, FormatsLabels) {
                "  }\n"
                "}",
                Style);
+  verifyFormat("void f() {\n"
+               "  L1:\n"
+               "  a();\n"
+               "  {\n"
+               "    L2:\n"
+               "    b();\n"
+               "    {\n"
+               "      L3:\n"
+               "      c();\n"
+               "      {\n"
+               "        L4:\n"
+               "      }\n"
+               "    }\n"
+               "  }\n"
+               "}",
+               Style);
   Style.IndentGotoLabels = FormatStyle::IGLS_HalfIndent;
   verifyFormat("void f() {\n"
                "  some_code();\n"
@@ -3232,6 +3280,22 @@ TEST_F(FormatTest, FormatsLabels) {
                "  }\n"
                "}",
                Style);
+  verifyFormat("void f() {\n"
+               " L1:\n"
+               "  a();\n"
+               "  {\n"
+               "   L2:\n"
+               "    b();\n"
+               "    {\n"
+               "     L3:\n"
+               "      c();\n"
+               "      {\n"
+               "       L4:\n"
+               "      }\n"
+               "    }\n"
+               "  }\n"
+               "}",
+               Style);
   Style.IndentWidth = 3;
   verifyFormat("void f() {\n"
                "   some_code();\n"
@@ -3240,7 +3304,7 @@ TEST_F(FormatTest, FormatsLabels) {
                "}",
                Style);
   Style.IndentWidth = 2;
-  Style.IndentGotoLabels = FormatStyle::IGLS_LeftAlign;
+  Style.IndentGotoLabels = FormatStyle::IGLS_NoIndent;
 
   Style.ColumnLimit = 15;
   verifyFormat("#define FOO   \\\n"

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to