aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Format/UnwrappedLineParser.cpp7
-rw-r--r--unittests/Format/FormatTest.cpp8
2 files changed, 12 insertions, 3 deletions
diff --git a/lib/Format/UnwrappedLineParser.cpp b/lib/Format/UnwrappedLineParser.cpp
index d218f88e55..89a391bd19 100644
--- a/lib/Format/UnwrappedLineParser.cpp
+++ b/lib/Format/UnwrappedLineParser.cpp
@@ -100,7 +100,6 @@ public:
Parser.Line.reset(new UnwrappedLine());
Parser.Line->Level = PreBlockLine->Level;
Parser.Line->InPPDirective = PreBlockLine->InPPDirective;
- Parser.CommentsBeforeNextToken.swap(CommentsBeforeNextToken);
}
~ScopedLineState() {
@@ -112,7 +111,6 @@ public:
Parser.MustBreakBeforeNextToken = true;
if (SwitchToPreprocessorLines)
Parser.CurrentLines = &Parser.Lines;
- Parser.CommentsBeforeNextToken.swap(CommentsBeforeNextToken);
}
private:
@@ -120,7 +118,6 @@ private:
const bool SwitchToPreprocessorLines;
UnwrappedLine *PreBlockLine;
- SmallVector<FormatToken, 1> CommentsBeforeNextToken;
};
UnwrappedLineParser::UnwrappedLineParser(
@@ -830,6 +827,10 @@ void UnwrappedLineParser::readToken() {
bool SwitchToPreprocessorLines =
!Line->Tokens.empty() && CurrentLines == &Lines;
ScopedLineState BlockState(*this, SwitchToPreprocessorLines);
+ // Comments stored before the preprocessor directive need to be output
+ // before the preprocessor directive, at the same level as the
+ // preprocessor directive, as we consider them to apply to the directive.
+ flushComments(FormatTok.NewlinesBefore > 0);
parsePPDirective();
}
if (!FormatTok.Tok.is(tok::comment))
diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp
index 3f26b0a482..92a2363bbd 100644
--- a/unittests/Format/FormatTest.cpp
+++ b/unittests/Format/FormatTest.cpp
@@ -592,6 +592,14 @@ TEST_F(FormatTest, UnderstandsSingleLineComments) {
verifyGoogleFormat(
"aaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
" aaaaaaaaaaaaaaaaaaaaaa); // 81 cols with this comment");
+ EXPECT_EQ("D(a, {\n"
+ " // test\n"
+ " int a;\n"
+ "});",
+ format("D(a, {\n"
+ "// test\n"
+ "int a;\n"
+ "});"));
}
TEST_F(FormatTest, CanFormatCommentsLocally) {