diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp index 58d5fc1f8c8650..025e1aa9772474 100644 --- a/clang/lib/Format/Format.cpp +++ b/clang/lib/Format/Format.cpp @@ -1920,10 +1920,13 @@ class BracesRemover : public TokenAnalyzer { 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, ""))); diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 828948e8f57724..8999e590612e30 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -26006,6 +26006,17 @@ TEST_F(FormatTest, RemoveBraces) { "}", 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"