Index: clang/lib/Format/UnwrappedLineParser.cpp =================================================================== --- clang/lib/Format/UnwrappedLineParser.cpp +++ clang/lib/Format/UnwrappedLineParser.cpp @@ -2166,6 +2166,9 @@ nextToken(); if (FormatTok->Tok.is(tok::l_paren)) parseParens(); + // handle AttributeMacro if (x) UNLIKELY + if (FormatTok->is(TT_AttributeMacro)) + nextToken(); // handle [[likely]] / [[unlikely]] if (FormatTok->is(tok::l_square) && tryToParseSimpleAttribute()) parseSquare(); @@ -2185,6 +2188,9 @@ } if (FormatTok->Tok.is(tok::kw_else)) { nextToken(); + // handle AttributeMacro else UNLIKELY + if (FormatTok->is(TT_AttributeMacro)) + nextToken(); // handle [[likely]] / [[unlikely]] if (FormatTok->Tok.is(tok::l_square) && tryToParseSimpleAttribute()) parseSquare(); Index: clang/unittests/Format/FormatTest.cpp =================================================================== --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -22180,6 +22180,42 @@ " return 29;\n" "}", Style); + + verifyFormat("if (argc > 5) [[unlikely]]\n" + " return 29;\n", + Style); + verifyFormat("if (argc > 5) [[likely]]\n" + " return 29;\n", + Style); + + Style.AttributeMacros.push_back("UNLIKELY"); + Style.AttributeMacros.push_back("LIKELY"); + verifyFormat("if (argc > 5) UNLIKELY\n" + " return 29;\n", + Style); + + verifyFormat("if (argc > 5) UNLIKELY {\n" + " return 29;\n" + "}", + Style); + verifyFormat("if (argc > 5) UNLIKELY {\n" + " return 29;\n" + "} else [[likely]] {\n" + " return 42;\n" + "}\n", + Style); + verifyFormat("if (argc > 5) UNLIKELY {\n" + " return 29;\n" + "} else LIKELY {\n" + " return 42;\n" + "}\n", + Style); + verifyFormat("if (argc > 5) [[unlikely]] {\n" + " return 29;\n" + "} else LIKELY {\n" + " return 42;\n" + "}\n", + Style); } TEST_F(FormatTest, PenaltyIndentedWhitespace) {