Index: lib/Format/BreakableToken.cpp =================================================================== --- lib/Format/BreakableToken.cpp +++ lib/Format/BreakableToken.cpp @@ -661,7 +661,6 @@ else if (Prefix[i] == "//!") Prefix[i] = "//! "; } - Tokens[i] = LineTok; Content[i] = Lines[i].substr(IndentPrefix.size()); OriginalContentColumn[i] = @@ -796,10 +795,13 @@ } else { // This is the first line for the current token, but no reflow with the // previous token is necessary. However, we still may need to adjust the - // start column. + // start column. Note that ContentColumn[LineIndex] is the expected + // content column after a possible update to the prefix, hence the prefix + // length change is included. unsigned LineColumn = ContentColumn[LineIndex] - - (Content[LineIndex].data() - Lines[LineIndex].data()); + (Content[LineIndex].data() - Lines[LineIndex].data()) + + (OriginalPrefix[LineIndex].size() - Prefix[LineIndex].size()); if (tokenAt(LineIndex).OriginalColumn != LineColumn) { Whitespaces.replaceWhitespace(*Tokens[LineIndex], /*Newlines=*/1, @@ -813,7 +815,8 @@ /*InPPDirective=*/false); } } - } else if (OriginalPrefix[LineIndex] != Prefix[LineIndex]) { + } + if (OriginalPrefix[LineIndex] != Prefix[LineIndex]) { // This is not the first line of the token. Adjust the prefix if necessary. // Take care of the space possibly introduced after a decoration. Index: unittests/Format/FormatTest.cpp =================================================================== --- unittests/Format/FormatTest.cpp +++ unittests/Format/FormatTest.cpp @@ -1371,6 +1371,25 @@ format("//Even if it makes the line exceed the column limit", getLLVMStyleWithColumns(51))); EXPECT_EQ("//--But not here", format("//--But not here", getLLVMStyle())); + EXPECT_EQ("/// line 1\n" + "// add leading whitespace", + format("/// line 1\n" + "//add leading whitespace", + getLLVMStyleWithColumns(30))); + EXPECT_EQ("/// line 1\n" + "/// line 2\n" + "//! line 3\n" + "//! line 4\n" + "//! line 5\n" + "// line 6\n" + "// line 7", + format("///line 1\n" + "///line 2\n" + "//! line 3\n" + "//!line 4\n" + "//!line 5\n" + "// line 6\n" + "//line 7", getLLVMStyleWithColumns(20))); EXPECT_EQ("// aa bb cc dd", format("// aa bb cc dd ",