diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp index 90fe3bd78607..0087e5eabe78 100644 --- a/clang/lib/Format/UnwrappedLineParser.cpp +++ b/clang/lib/Format/UnwrappedLineParser.cpp @@ -719,7 +719,7 @@ void UnwrappedLineParser::parseStructuralElement() { // Recognize function-like macro usages without trailing semicolon. if (FormatTok->Tok.is(tok::l_paren)) { parseParens(); - if (FormatTok->HasUnescapedNewline && + if (FormatTok->NewlinesBefore > 0 && tokenCanStartNewLine(FormatTok->Tok)) { addUnwrappedLine(); return; diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 66b54ab9d21d..232a06355810 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -2198,6 +2198,17 @@ TEST_F(FormatTest, MacroCallsWithoutTrailingSemicolon) { " IPC_END_MESSAGE_MAP()\n" "}")); + // Same inside macros. + EXPECT_EQ("#define LIST(L) \\\n" + " L(A) \\\n" + " L(B) \\\n" + " L(C)", + format("#define LIST(L) \\\n" + " L(A) \\\n" + " L(B) \\\n" + " L(C)", + getGoogleStyle())); + // These must not be recognized as macros. EXPECT_EQ("int q() {\n" " f(x);\n"