[clang] 91b5d50 - Revert "[clang-format] Link the braces of a block in UnwrappedLineParser"

Owen Pan via cfe-commits cfe-commits at lists.llvm.org
Sat Dec 10 02:32:01 PST 2022


Author: Owen Pan
Date: 2022-12-10T02:31:53-08:00
New Revision: 91b5d508e350a26028b7fc1397f21334e49dda5d

URL: https://github.com/llvm/llvm-project/commit/91b5d508e350a26028b7fc1397f21334e49dda5d
DIFF: https://github.com/llvm/llvm-project/commit/91b5d508e350a26028b7fc1397f21334e49dda5d.diff

LOG: Revert "[clang-format] Link the braces of a block in UnwrappedLineParser"

This reverts commit e33243c950ac40d027ad8facbf7ccf0624604a16 but
keeps the added test case and also adds another test case.

Fixes #59417.

Differential Revision: https://reviews.llvm.org/D139760

Added: 
    

Modified: 
    clang/lib/Format/UnwrappedLineParser.cpp
    clang/unittests/Format/BracesRemoverTest.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp
index df8cff6748b17..3be4ef7ca6a1a 100644
--- a/clang/lib/Format/UnwrappedLineParser.cpp
+++ b/clang/lib/Format/UnwrappedLineParser.cpp
@@ -934,9 +934,6 @@ FormatToken *UnwrappedLineParser::parseBlock(
     return IfLBrace;
   }
 
-  Tok->MatchingParen = FormatTok;
-  FormatTok->MatchingParen = Tok;
-
   const bool IsFunctionRBrace =
       FormatTok->is(tok::r_brace) && Tok->is(TT_FunctionLBrace);
 
@@ -970,7 +967,10 @@ FormatToken *UnwrappedLineParser::parseBlock(
     }
     return mightFitOnOneLine((*CurrentLines)[Index], Tok);
   };
-  Tok->Optional = RemoveBraces();
+  if (RemoveBraces()) {
+    Tok->MatchingParen = FormatTok;
+    FormatTok->MatchingParen = Tok;
+  }
 
   size_t PPEndHash = computePPHash();
 
@@ -2707,20 +2707,10 @@ static void markOptionalBraces(FormatToken *LeftBrace) {
 
   assert(RightBrace->is(tok::r_brace));
   assert(RightBrace->MatchingParen == LeftBrace);
+  assert(LeftBrace->Optional == RightBrace->Optional);
 
-  RightBrace->Optional = LeftBrace->Optional;
-}
-
-static void resetOptional(FormatToken *LeftBrace) {
-  if (!LeftBrace)
-    return;
-
-  const auto *RightBrace = LeftBrace->MatchingParen;
-  const bool IsOptionalRightBrace = RightBrace && RightBrace->Optional;
-  assert(LeftBrace->Optional || !IsOptionalRightBrace);
-
-  if (!IsOptionalRightBrace)
-    LeftBrace->Optional = false;
+  LeftBrace->Optional = true;
+  RightBrace->Optional = true;
 }
 
 void UnwrappedLineParser::handleAttributes() {
@@ -2788,7 +2778,8 @@ FormatToken *UnwrappedLineParser::parseIfThenElse(IfStmtKind *IfKind,
 
   if (Style.RemoveBracesLLVM) {
     assert(!NestedTooDeep.empty());
-    KeepIfBraces = KeepIfBraces || (IfLeftBrace && !IfLeftBrace->Optional) ||
+    KeepIfBraces = KeepIfBraces ||
+                   (IfLeftBrace && !IfLeftBrace->MatchingParen) ||
                    NestedTooDeep.back() || IfBlockKind == IfStmtKind::IfOnly ||
                    IfBlockKind == IfStmtKind::IfElseIf;
   }
@@ -2819,9 +2810,8 @@ FormatToken *UnwrappedLineParser::parseIfThenElse(IfStmtKind *IfKind,
                          ElseBlockKind == IfStmtKind::IfElseIf;
       } else if (FollowedByIf && IfLBrace && !IfLBrace->Optional) {
         KeepElseBraces = true;
-        assert(ElseLeftBrace->Optional);
         assert(ElseLeftBrace->MatchingParen);
-        ElseLeftBrace->MatchingParen->Optional = true;
+        markOptionalBraces(ElseLeftBrace);
       }
       addUnwrappedLine();
     } else if (FormatTok->is(tok::kw_if)) {
@@ -2856,7 +2846,7 @@ FormatToken *UnwrappedLineParser::parseIfThenElse(IfStmtKind *IfKind,
 
   assert(!NestedTooDeep.empty());
   KeepElseBraces = KeepElseBraces ||
-                   (ElseLeftBrace && !ElseLeftBrace->Optional) ||
+                   (ElseLeftBrace && !ElseLeftBrace->MatchingParen) ||
                    NestedTooDeep.back();
 
   NestedTooDeep.pop_back();
@@ -2864,11 +2854,17 @@ FormatToken *UnwrappedLineParser::parseIfThenElse(IfStmtKind *IfKind,
   if (!KeepIfBraces && !KeepElseBraces) {
     markOptionalBraces(IfLeftBrace);
     markOptionalBraces(ElseLeftBrace);
+  } else if (IfLeftBrace) {
+    FormatToken *IfRightBrace = IfLeftBrace->MatchingParen;
+    if (IfRightBrace) {
+      assert(IfRightBrace->MatchingParen == IfLeftBrace);
+      assert(!IfLeftBrace->Optional);
+      assert(!IfRightBrace->Optional);
+      IfLeftBrace->MatchingParen = nullptr;
+      IfRightBrace->MatchingParen = nullptr;
+    }
   }
 
-  resetOptional(IfLeftBrace);
-  resetOptional(ElseLeftBrace);
-
   if (IfKind)
     *IfKind = Kind;
 
@@ -3083,7 +3079,6 @@ void UnwrappedLineParser::parseLoopBody(bool KeepBraces, bool WrapRightBrace) {
       if (!NestedTooDeep.back())
         markOptionalBraces(LeftBrace);
     }
-    resetOptional(LeftBrace);
     if (WrapRightBrace)
       addUnwrappedLine();
   } else {

diff  --git a/clang/unittests/Format/BracesRemoverTest.cpp b/clang/unittests/Format/BracesRemoverTest.cpp
index dea551c979397..57cf40d4c9e95 100644
--- a/clang/unittests/Format/BracesRemoverTest.cpp
+++ b/clang/unittests/Format/BracesRemoverTest.cpp
@@ -683,6 +683,41 @@ TEST_F(BracesRemoverTest, RemoveBraces) {
                "return a;",
                Style);
 
+  verifyFormat("if (a)\n"
+               "#ifdef FOO\n"
+               "  if (b)\n"
+               "    bar = c;\n"
+               "  else\n"
+               "#endif\n"
+               "  {\n"
+               "    foo = d;\n"
+               "#ifdef FOO\n"
+               "    bar = e;\n"
+               "#else\n"
+               "  bar = f;\n" // FIXME: should be indented 1 more level.
+               "#endif\n"
+               "  }\n"
+               "else\n"
+               "  bar = g;",
+               "if (a)\n"
+               "#ifdef FOO\n"
+               "  if (b)\n"
+               "    bar = c;\n"
+               "  else\n"
+               "#endif\n"
+               "  {\n"
+               "    foo = d;\n"
+               "#ifdef FOO\n"
+               "    bar = e;\n"
+               "#else\n"
+               "    bar = f;\n"
+               "#endif\n"
+               "  }\n"
+               "else {\n"
+               "  bar = g;\n"
+               "}",
+               Style);
+
   Style.ColumnLimit = 65;
   verifyFormat("if (condition) {\n"
                "  ff(Indices,\n"


        


More information about the cfe-commits mailing list