https://github.com/ssubbotin updated 
https://github.com/llvm/llvm-project/pull/207187

>From d68bcf2d24b0e2eb24067d74c4b4d32682e19b0c Mon Sep 17 00:00:00 2001
From: Sergey Subbotin <[email protected]>
Date: Thu, 2 Jul 2026 15:30:43 +0200
Subject: [PATCH 1/2] [clang-format] Fix BlockIndent compat mapping of
 AlignAfterOpenBracket

be11e2b3d25 (#192283) replaced the fallthrough chain in the
AlignAfterOpenBracket backward-compatibility switch with explicit
per-case assignments. In the BAS_BlockIndent case the
BreakBeforeCloseBracket{BracedList,Function,If} = true assignments are
immediately overwritten with false, and
BreakAfterOpenBracket{BracedList,Function,If} (previously inherited
from the BAS_AlwaysBreak case via fallthrough) are never set. As a
result, "AlignAfterOpenBracket: BlockIndent" parses to the same flag
set as "Align", silently dropping the block-indent style for existing
configurations.

Restore the pre-#192283 mapping and pin the full BlockIndent flag
mapping in ConfigParseTest so the compat shim cannot regress silently
again.
---
 clang/lib/Format/Format.cpp                | 10 ++++-----
 clang/unittests/Format/ConfigParseTest.cpp | 25 ++++++++++++++++++++++
 2 files changed, 30 insertions(+), 5 deletions(-)

diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp
index ecfe5d2ce60d0..037111d8e9e5d 100644
--- a/clang/lib/Format/Format.cpp
+++ b/clang/lib/Format/Format.cpp
@@ -1159,14 +1159,14 @@ template <> struct MappingTraits<FormatStyle> {
         break;
       case BAS_BlockIndent:
         Style.AlignAfterOpenBracket = true;
+        Style.BreakAfterOpenBracketBracedList = true;
+        Style.BreakAfterOpenBracketFunction = true;
+        Style.BreakAfterOpenBracketIf = true;
+        Style.BreakAfterOpenBracketLoop = false;
+        Style.BreakAfterOpenBracketSwitch = false;
         Style.BreakBeforeCloseBracketBracedList = true;
         Style.BreakBeforeCloseBracketFunction = true;
         Style.BreakBeforeCloseBracketIf = true;
-        Style.BreakAfterOpenBracketLoop = false;
-        Style.BreakAfterOpenBracketSwitch = false;
-        Style.BreakBeforeCloseBracketBracedList = false;
-        Style.BreakBeforeCloseBracketFunction = false;
-        Style.BreakBeforeCloseBracketIf = false;
         Style.BreakBeforeCloseBracketLoop = false;
         Style.BreakBeforeCloseBracketSwitch = false;
         break;
diff --git a/clang/unittests/Format/ConfigParseTest.cpp 
b/clang/unittests/Format/ConfigParseTest.cpp
index eeaf5d3f66d96..1bfe3e2a61806 100644
--- a/clang/unittests/Format/ConfigParseTest.cpp
+++ b/clang/unittests/Format/ConfigParseTest.cpp
@@ -652,6 +652,31 @@ TEST(ConfigParseTest, ParsesConfiguration) {
   CHECK_PARSE("AlignAfterOpenBracket: false", AlignAfterOpenBracket, false);
   CHECK_PARSE("AlignAfterOpenBracket: BlockIndent", AlignAfterOpenBracket,
               true);
+  // BlockIndent implies breaking after the open bracket and before the close
+  // bracket of braced lists, function calls/declarations, and if conditions.
+  Style.BreakAfterOpenBracketBracedList = false;
+  Style.BreakAfterOpenBracketFunction = false;
+  Style.BreakAfterOpenBracketIf = false;
+  Style.BreakAfterOpenBracketLoop = true;
+  Style.BreakAfterOpenBracketSwitch = true;
+  Style.BreakBeforeCloseBracketBracedList = false;
+  Style.BreakBeforeCloseBracketFunction = false;
+  Style.BreakBeforeCloseBracketIf = false;
+  Style.BreakBeforeCloseBracketLoop = true;
+  Style.BreakBeforeCloseBracketSwitch = true;
+  EXPECT_EQ(
+      0,
+      parseConfiguration("AlignAfterOpenBracket: BlockIndent", 
&Style).value());
+  EXPECT_TRUE(Style.BreakAfterOpenBracketBracedList);
+  EXPECT_TRUE(Style.BreakAfterOpenBracketFunction);
+  EXPECT_TRUE(Style.BreakAfterOpenBracketIf);
+  EXPECT_FALSE(Style.BreakAfterOpenBracketLoop);
+  EXPECT_FALSE(Style.BreakAfterOpenBracketSwitch);
+  EXPECT_TRUE(Style.BreakBeforeCloseBracketBracedList);
+  EXPECT_TRUE(Style.BreakBeforeCloseBracketFunction);
+  EXPECT_TRUE(Style.BreakBeforeCloseBracketIf);
+  EXPECT_FALSE(Style.BreakBeforeCloseBracketLoop);
+  EXPECT_FALSE(Style.BreakBeforeCloseBracketSwitch);
   Style.AlignAfterOpenBracket = false;
   CHECK_PARSE("AlignAfterOpenBracket: true", AlignAfterOpenBracket, true);
 

>From fc6dbe94c9fd7753a9eeb2a20e02a937d56d685a Mon Sep 17 00:00:00 2001
From: Sergey Subbotin <[email protected]>
Date: Sun, 5 Jul 2026 01:44:08 +0200
Subject: [PATCH 2/2] Reuse the CHECK_PARSE parse instead of a second
 parseConfiguration call

---
 clang/unittests/Format/ConfigParseTest.cpp | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/clang/unittests/Format/ConfigParseTest.cpp 
b/clang/unittests/Format/ConfigParseTest.cpp
index 1bfe3e2a61806..205cc9bcb6d31 100644
--- a/clang/unittests/Format/ConfigParseTest.cpp
+++ b/clang/unittests/Format/ConfigParseTest.cpp
@@ -650,8 +650,6 @@ TEST(ConfigParseTest, ParsesConfiguration) {
               "AlignAfterOpenBracket: AlwaysBreak",
               BreakAfterOpenBracketLoop, true);
   CHECK_PARSE("AlignAfterOpenBracket: false", AlignAfterOpenBracket, false);
-  CHECK_PARSE("AlignAfterOpenBracket: BlockIndent", AlignAfterOpenBracket,
-              true);
   // BlockIndent implies breaking after the open bracket and before the close
   // bracket of braced lists, function calls/declarations, and if conditions.
   Style.BreakAfterOpenBracketBracedList = false;
@@ -664,9 +662,8 @@ TEST(ConfigParseTest, ParsesConfiguration) {
   Style.BreakBeforeCloseBracketIf = false;
   Style.BreakBeforeCloseBracketLoop = true;
   Style.BreakBeforeCloseBracketSwitch = true;
-  EXPECT_EQ(
-      0,
-      parseConfiguration("AlignAfterOpenBracket: BlockIndent", 
&Style).value());
+  CHECK_PARSE("AlignAfterOpenBracket: BlockIndent", AlignAfterOpenBracket,
+              true);
   EXPECT_TRUE(Style.BreakAfterOpenBracketBracedList);
   EXPECT_TRUE(Style.BreakAfterOpenBracketFunction);
   EXPECT_TRUE(Style.BreakAfterOpenBracketIf);

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

Reply via email to