diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -2482,7 +2482,7 @@ // return i + 1; // } if (Next->Next && Next->Next->is(tok::identifier) && - !(Next->MatchingParen->Next && Next->MatchingParen->Next->is(tok::semi))) + Line.Last->isNot(tok::semi)) return true; for (const FormatToken *Tok = Next->Next; Tok && Tok != Next->MatchingParen; Tok = Tok->Next) { 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 @@ -8224,7 +8224,12 @@ "f(i)\n" "{\n" " return i + 1;\n" - "}", + "}\n" + "int\n" // Break here. + "f(i)\n" + "{\n" + " return i + 1;\n" + "};", Style); verifyFormat("int f(a, b, c);\n" // No break here. "int\n" // Break here. @@ -8233,8 +8238,20 @@ "float c;\n" "{\n" " return a + b < c;\n" - "}", + "}\n" + "int\n" // Break here. + "f(a, b, c)\n" // Break here. + "short a, b;\n" + "float c;\n" + "{\n" + " return a + b < c;\n" + "};", Style); + // The return breaking style doesn't affect object definitions with + // attribute-like macros. + verifyFormat("Tttttttttttttttttttttttt ppppppppppppppp\n" + " ABSL_GUARDED_BY(mutex) = {};", + getGoogleStyleWithColumns(40)); Style = getGNUStyle();