Index: lib/Format/UnwrappedLineParser.cpp =================================================================== --- lib/Format/UnwrappedLineParser.cpp +++ lib/Format/UnwrappedLineParser.cpp @@ -986,6 +986,8 @@ if (FormatTok->Tok.is(tok::string_literal)) { nextToken(); if (FormatTok->Tok.is(tok::l_brace)) { + if (isOnNewLine(*FormatTok)) + FormatTok->MustBreakBefore = true; parseBlock(/*MustBeDeclaration=*/true, /*AddLevel=*/false); addUnwrappedLine(); return; Index: unittests/Format/FormatTest.cpp =================================================================== --- unittests/Format/FormatTest.cpp +++ unittests/Format/FormatTest.cpp @@ -1595,7 +1595,24 @@ Style)); } -TEST_F(FormatTest, FormatsExternC) { verifyFormat("extern \"C\" {\nint a;"); } +TEST_F(FormatTest, FormatsExternC) { + verifyFormat("extern \"C\" {\nint a;"); + verifyFormat("extern \"C\" {};"); + EXPECT_EQ("extern \"C\" {\n" + "int i = 42;\n" + "}", + format("extern \"C\" {\n" + "int i = 42;\n" + "}")); + EXPECT_EQ("extern \"C\"\n" + "{\n" + "int i = 42;\n" + "}", + format("extern \"C\"\n" + "{\n" + "int i = 42;\n" + "}")); +} TEST_F(FormatTest, FormatsInlineASM) { verifyFormat("asm(\"xyz\" : \"=a\"(a), \"=d\"(b) : \"a\"(data));");