diff --git a/clang/lib/Format/UnwrappedLineFormatter.cpp b/clang/lib/Format/UnwrappedLineFormatter.cpp --- a/clang/lib/Format/UnwrappedLineFormatter.cpp +++ b/clang/lib/Format/UnwrappedLineFormatter.cpp @@ -309,7 +309,8 @@ // Try to merge a control statement block with left brace wrapped if (I[1]->First->is(tok::l_brace) && (TheLine->First->isOneOf(tok::kw_if, tok::kw_while, tok::kw_for, - tok::kw_switch, tok::kw_try, tok::kw_do) || + tok::kw_switch, tok::kw_try, tok::kw_do, + TT_ForEachMacro) || (TheLine->First->is(tok::r_brace) && TheLine->First->Next && TheLine->First->Next->isOneOf(tok::kw_else, tok::kw_catch))) && Style.BraceWrapping.AfterControlStatement == 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 @@ -1663,6 +1663,20 @@ " foo();\n" "}", format("for(int i=0;i<10;++i){foo();}", Style)); + EXPECT_EQ("foreach (int i,\n" + " list)\n" + "{\n" + " foo();\n" + "}", + format("foreach(int i, list){foo();}", Style)); + Style.ColumnLimit = + 40; // to concentrate at brace wrapping, not line wrap due to column limit + EXPECT_EQ("foreach (int i, list) {\n" + " foo();\n" + "}", + format("foreach(int i, list){foo();}", Style)); + Style.ColumnLimit = + 20; // to concentrate at brace wrapping, not line wrap due to column limit EXPECT_EQ("while (foo || bar ||\n" " baz)\n" "{\n"