diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp --- a/clang/lib/Format/UnwrappedLineParser.cpp +++ b/clang/lib/Format/UnwrappedLineParser.cpp @@ -2889,6 +2889,7 @@ if (FormatTok->is(tok::l_paren)) parseParens(); + handleAttributes(); parseLoopBody(KeepBraces, /*WrapRightBrace=*/true); } diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -23846,6 +23846,22 @@ " return 29;\n", Style); + verifyFormat("while (limit > 0) [[unlikely]] {\n" + " --limit;\n" + "}", + Style); + verifyFormat("for (auto &limit : limits) [[likely]] {\n" + " --limit;\n" + "}", + Style); + + verifyFormat("for (auto &limit : limits) [[unlikely]]\n" + " --limit;", + Style); + verifyFormat("while (limit > 0) [[likely]]\n" + " --limit;", + Style); + Style.AttributeMacros.push_back("UNLIKELY"); Style.AttributeMacros.push_back("LIKELY"); verifyFormat("if (argc > 5) UNLIKELY\n" @@ -23874,6 +23890,22 @@ " return 42;\n" "}\n", Style); + + verifyFormat("for (auto &limit : limits) UNLIKELY {\n" + " --limit;\n" + "}", + Style); + verifyFormat("while (limit > 0) LIKELY {\n" + " --limit;\n" + "}", + Style); + + verifyFormat("while (limit > 0) UNLIKELY\n" + " --limit;", + Style); + verifyFormat("for (auto &limit : limits) LIKELY\n" + " --limit;", + Style); } TEST_F(FormatTest, PenaltyIndentedWhitespace) {