diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index f057ef7f3e74..3fea52b9f8af 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -1596,7 +1596,7 @@ bool TokenAnnotator::mustBreakBefore(const AnnotatedLine &Line, !Style.ConstructorInitializerAllOnOneLineOrOnePerLine) { return true; } else if (Right.is(tok::l_brace) && Right.BlockKind == BK_Block && - Right.Type != TT_ObjCBlockLBrace) { + Right.Type != TT_ObjCBlockLBrace && Right.Type != TT_DictLiteral) { return Style.BreakBeforeBraces == FormatStyle::BS_Allman || Style.BreakBeforeBraces == FormatStyle::BS_GNU; } else if (Right.is(tok::string_literal) && diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 9cf4efcbf1ff..94d4bbb00ef0 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -7698,15 +7698,23 @@ TEST_F(FormatTest, AllmanBraceBreaking) { "#endif", BreakBeforeBrace); - // This shouldn't affect ObjC blocks. + // This shouldn't affect ObjC blocks.. verifyFormat("[self doSomeThingWithACompletionHandler:^{\n" " // ...\n" " int i;\n" - "}];"); + "}];", + BreakBeforeBrace); verifyFormat("void (^block)(void) = ^{\n" " // ...\n" " int i;\n" - "};"); + "};", + BreakBeforeBrace); + // .. or dict literals. + verifyFormat("void f()\n" + "{\n" + " [object someMethod:@{ @\"a\" : @\"b\" }];\n" + "}", + BreakBeforeBrace); BreakBeforeBrace.ColumnLimit = 19; verifyFormat("void f() { int i; }", BreakBeforeBrace);