diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -3299,11 +3299,15 @@ if (Left.isOneOf(tok::kw_try, Keywords.kw___except, tok::kw_catch)) return Style.SpaceBeforeParensOptions.AfterControlStatements || spaceRequiredBeforeParens(Right); - if (Left.isOneOf(tok::kw_new, tok::kw_delete) || - (Left.is(tok::r_square) && Left.MatchingParen && - Left.MatchingParen->Previous && - Left.MatchingParen->Previous->is(tok::kw_delete))) - return Style.SpaceBeforeParens != FormatStyle::SBPO_Never || + if (Left.isOneOf(tok::kw_new, tok::kw_delete)) + return ((!Line.MightBeFunctionDecl || !Left.Previous) && + Style.SpaceBeforeParens != FormatStyle::SBPO_Never) || + spaceRequiredBeforeParens(Right); + + if (Left.is(tok::r_square) && Left.MatchingParen && + Left.MatchingParen->Previous && + Left.MatchingParen->Previous->is(tok::kw_delete)) + return (Style.SpaceBeforeParens != FormatStyle::SBPO_Never) || spaceRequiredBeforeParens(Right); } if (Line.Type != LT_PreprocessorDirective && 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 @@ -9919,6 +9919,11 @@ verifyFormat("void operator new(void *foo) ATTRIB;"); verifyFormat("void operator delete[](void *foo) ATTRIB;"); verifyFormat("void operator delete(void *ptr) noexcept;"); + + EXPECT_EQ("void new(link p);\n" + "void delete(link p);\n", + format("void new (link p);\n" + "void delete(link p);\n")); } TEST_F(FormatTest, UnderstandsUsesOfStarAndAmp) {