| /* PR middle-end/98160 - ICE in warn_dealloc_offset on member placement | |
| new and delete | |
| { dg-do compile } | |
| { dg-options "-O2 -Wall" } */ | |
| typedef __SIZE_TYPE__ size_t; | |
| void* (*pf) (size_t); | |
| struct A; | |
| struct B | |
| { | |
| B (); | |
| void* operator new (size_t, A*); | |
| void operator delete (void*, A*); | |
| }; | |
| void operator delete (void *, A*); | |
| void B::operator delete (void*, A *p) | |
| { | |
| void *q = pf (1); | |
| ::operator delete ((char*)q + 1, p); | |
| } | |
| void* f (A *p) | |
| { | |
| return new (p) B; | |
| } |