Index: lib/Format/ContinuationIndenter.cpp =================================================================== --- lib/Format/ContinuationIndenter.cpp +++ lib/Format/ContinuationIndenter.cpp @@ -90,8 +90,10 @@ return MatchingStackIndex >= 0 ? &Stack[MatchingStackIndex] : nullptr; }; for (; End->Next; End = End->Next) { - if (End->Next->CanBreakBefore || !End->Next->closesScope()) + if (End->Next->CanBreakBefore) break; + if (!End->Next->closesScope()) + continue; if (End->Next->MatchingParen->isOneOf(tok::l_brace, TT_ArrayInitializerLSquare, tok::less)) { Index: unittests/Format/FormatTestObjC.cpp =================================================================== --- unittests/Format/FormatTestObjC.cpp +++ unittests/Format/FormatTestObjC.cpp @@ -1142,6 +1142,18 @@ " @\"aaaaaaaaaaaaaaaaaaaaaaaaaa\"\n" "];\n"); } + +TEST_F(FormatTestObjC, BreaksCallStatementWhereSemiJustOverTheLimit) { + Style.ColumnLimit = 60; + // If the statement starting with 'a = ...' is put on a single line, the ';' + // is at line 61. + verifyFormat("int f(int a) {\n" + " a = [self aaaaaaaaaa:bbbbbbbbb\n" + " ccccccccc:dddddddd\n" + " ee:fddd];\n" + "}"); +} + } // end namespace } // end namespace format } // end namespace clang