(root)/
gcc-13.2.0/
gcc/
testsuite/
g++.dg/
warn/
Wfree-nonheap-object-4.C
/* PR middle-end/98160: bogus -Wfree-nonheap-object calling member delete
   on the result of inline member new plus offset
   { dg-do compile }
   { dg-options "-O2" } */

struct MemoryManager { void* allocate (); };

struct XMemory
{
  void* operator new (__SIZE_TYPE__, MemoryManager *mgr)
  {
    void *p = mgr->allocate ();
    return (char*)p + sizeof(MemoryManager);
  }

  void operator delete (void*, MemoryManager*);
};

struct XMLMutex: XMemory {
  XMLMutex();
};

void gValidatorMutex (MemoryManager *mgr)
{
  new (mgr) XMLMutex;   // { dg-bogus "\\\[-Wfree-nonheap-object" }
}