Index: clang/lib/Format/TokenAnnotator.cpp =================================================================== --- clang/lib/Format/TokenAnnotator.cpp +++ clang/lib/Format/TokenAnnotator.cpp @@ -1892,6 +1892,14 @@ return false; LeftOfParens = LeftOfParens->MatchingParen->Previous; } + + // The Condition directly below this one will see the operator arguments + // as a (void *foo) cast. + // void operator delete(void *foo) ATTRIB; + if (LeftOfParens->Tok.getIdentifierInfo() && + LeftOfParens->Previous && + LeftOfParens->Previous->is(tok::kw_operator)) + return false; // If there is an identifier (or with a few exceptions a keyword) right // before the parentheses, this is unlikely to be a cast. Index: clang/unittests/Format/FormatTest.cpp =================================================================== --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -9459,6 +9459,11 @@ " new (aaaaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaa))\n" " typename aaaaaaaaaaaaaaaaaaaaaaaa();"); verifyFormat("delete[] h->p;"); + + verifyFormat("void operator delete(void *foo) ATTRIB;"); + verifyFormat("void operator new(void *foo) ATTRIB;"); + verifyFormat("void operator delete[](void *foo) ATTRIB;"); + verifyFormat("void operator delete(void *ptr ) noexcept;"); } TEST_F(FormatTest, UnderstandsUsesOfStarAndAmp) {