Index: clang/lib/Format/WhitespaceManager.cpp =================================================================== --- clang/lib/Format/WhitespaceManager.cpp +++ clang/lib/Format/WhitespaceManager.cpp @@ -957,7 +957,8 @@ if (Style.AlignTrailingComments.Kind == FormatStyle::TCAS_Leave) { auto OriginalSpaces = Changes[i].OriginalWhitespaceRange.getEnd().getRawEncoding() - - Changes[i].OriginalWhitespaceRange.getBegin().getRawEncoding(); + Changes[i].OriginalWhitespaceRange.getBegin().getRawEncoding() - + Changes[i].NewlinesBefore; unsigned RestoredLineLength = Changes[i].StartOfTokenColumn + Changes[i].TokenLength + OriginalSpaces; // If leaving comments makes the line exceed the column limit, give up to Index: clang/unittests/Format/FormatTestComments.cpp =================================================================== --- clang/unittests/Format/FormatTestComments.cpp +++ clang/unittests/Format/FormatTestComments.cpp @@ -3062,6 +3062,18 @@ "int d;// comment\n", Style)); + EXPECT_EQ("// do not touch\n" + "int a; // any comments\n\n" + " // comment\n" + "// comment\n\n" + "// comment\n", + format("// do not touch\n" + "int a; // any comments\n\n" + " // comment\n" + "// comment\n\n" + "// comment\n", + Style)); + // Just format comments normally when leaving exceeds the column limit Style.ColumnLimit = 35; EXPECT_EQ("int foo = 12345; // comment\n"