[ClangFormat] 'try' of function-try-block doesn't obey BraceWrapping
authorOwen Pan <owenpiano@gmail.com>
Fri, 28 Sep 2018 09:17:00 +0000 (09:17 +0000)
committerOwen Pan <owenpiano@gmail.com>
Fri, 28 Sep 2018 09:17:00 +0000 (09:17 +0000)
It should respond to AfterFunction, not AfterControlStatement.

Fixes PR39067

llvm-svn: 343305

clang/lib/Format/UnwrappedLineParser.cpp
clang/unittests/Format/FormatTest.cpp

index 752357c..09cd660 100644 (file)
@@ -1266,6 +1266,8 @@ void UnwrappedLineParser::parseStructuralElement() {
       break;
     case tok::kw_try:
       // We arrive here when parsing function-try blocks.
+      if (Style.BraceWrapping.AfterFunction)
+        addUnwrappedLine();
       parseTryCatch();
       return;
     case tok::identifier: {
index dac8497..3e23c5e 100644 (file)
@@ -2628,6 +2628,16 @@ TEST_F(FormatTest, MacroCallsWithoutTrailingSemicolon) {
                    "  A(X x)\n"
                    "  try : t(0) {} catch (...) {}\n"
                    "};"));
+  FormatStyle Style = getLLVMStyle();
+  Style.BreakBeforeBraces = FormatStyle::BS_Custom;
+  Style.BraceWrapping.AfterControlStatement = true;
+  Style.BraceWrapping.AfterFunction = true;
+  EXPECT_EQ("void f()\n"
+            "try\n"
+            "{\n"
+            "}",
+            format("void f() try {\n"
+                   "}", Style));
   EXPECT_EQ("class SomeClass {\n"
             "public:\n"
             "  SomeClass() EXCLUSIVE_LOCK_FUNCTION(mu_);\n"