diff options
| -rw-r--r-- | clang/lib/Format/UnwrappedLineParser.cpp | 7 | ||||
| -rw-r--r-- | clang/unittests/Format/FormatTest.cpp | 8 | 
2 files changed, 12 insertions, 3 deletions
diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp index d218f88e551..89a391bd192 100644 --- a/clang/lib/Format/UnwrappedLineParser.cpp +++ b/clang/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/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 3f26b0a4821..92a2363bbdb 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/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) {  | 

