Index: clang/lib/Format/Format.cpp =================================================================== --- clang/lib/Format/Format.cpp +++ clang/lib/Format/Format.cpp @@ -1918,10 +1918,13 @@ assert(Next || Token == Line->Last); if (!Next && NextLine) Next = NextLine->First; - const auto Start = - Next && Next->NewlinesBefore == 0 && Next->isNot(tok::eof) - ? Token->Tok.getLocation() - : Token->WhitespaceRange.getBegin(); + SourceLocation Start; + if (Next && Next->NewlinesBefore == 0 && Next->isNot(tok::eof)) { + Start = Token->Tok.getLocation(); + Next->WhitespaceRange = Token->WhitespaceRange; + } else { + Start = Token->WhitespaceRange.getBegin(); + } const auto Range = CharSourceRange::getCharRange(Start, Token->Tok.getEndLoc()); cantFail(Result.add(tooling::Replacement(SourceMgr, Range, ""))); Index: clang/unittests/Format/FormatTest.cpp =================================================================== --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -26006,6 +26006,17 @@ "}", Style); + verifyFormat("while (0)\n" + " if (a)\n" + " return b;\n" + "return a;", + "while (0) {\n" + " if (a) {\n" + " return b;\n" + "}}\n" + "return a;", + Style); + Style.ColumnLimit = 65; verifyFormat("if (condition) {\n" " ff(Indices,\n"