https://github.com/llvm/llvm-project/issues/27037
Sorry its taken so long to get to this issue! (got it before it hit its 6th birthday!)
```
void operator delete(void *foo)ATTRIB;
```
(void *foo) is incorrectly determined to be a C-Style Cast resulting in the space being removed after the ) and before the attrib, due to the detection of
```
delete (A* )a;
```
The following was previously unaffected
```
void operator new(void *foo) ATTRIB;
```
Fixes #27037
Reviewed By: curdeius, HazardyKnusperkeks
Differential Revision: https://reviews.llvm.org/D116920
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.
if (LeftOfParens->Tok.getIdentifierInfo() &&
" 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) {