diff --git a/lib/Format/UnwrappedLineParser.cpp b/lib/Format/UnwrappedLineParser.cpp index 6dee251a918a622b53b8a8591523a72d873e3a61..b596553bc0192925cde49dda63cd077d6bbbc991 100644 --- a/lib/Format/UnwrappedLineParser.cpp +++ b/lib/Format/UnwrappedLineParser.cpp @@ -863,7 +863,13 @@ void UnwrappedLineParser::parseStructuralElement() { bool FunctionLike = FormatTok->is(tok::l_paren); if (FunctionLike) parseParens(); - if (FormatTok->NewlinesBefore > 0 && + + bool FollowedByNewline = + CommentsBeforeNextToken.empty() + ? FormatTok->NewlinesBefore > 0 + : CommentsBeforeNextToken.front()->NewlinesBefore > 0; + + if (FollowedByNewline && (Text.size() >= 5 || FunctionLike) && tokenCanStartNewLine(FormatTok->Tok) && Text == Text.upper()) { addUnwrappedLine(); @@ -1748,14 +1754,12 @@ void UnwrappedLineParser::flushComments(bool NewlineBeforeNext) { I = CommentsBeforeNextToken.begin(), E = CommentsBeforeNextToken.end(); I != E; ++I) { - if (isOnNewLine(**I) && JustComments) { + if (isOnNewLine(**I) && JustComments) addUnwrappedLine(); - } pushToken(*I); } - if (NewlineBeforeNext && JustComments) { + if (NewlineBeforeNext && JustComments) addUnwrappedLine(); - } CommentsBeforeNextToken.clear(); } diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index 105d1a11253a13ab837a42001a9b242cf6675dd4..d6f0c08bf0a8225ae0ab80628e50b6040f4f1ffa 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -2804,6 +2804,10 @@ TEST_F(FormatTest, MacrosWithoutTrailingSemicolon) { "\n" " A() {\n}\n" "} ;")); + EXPECT_EQ("MACRO\n" + "/*static*/ int i;", + format("MACRO\n" + " /*static*/ int i;")); EXPECT_EQ("SOME_MACRO\n" "namespace {\n" "void f();\n"