// { dg-additional-options "-O1 -Wno-free-nonheap-object -Wno-analyzer-out-of-bounds" } /* Disabled out-of-bounds checker because the output relied on optimizations. out-of-bounds-placement-new.C tests the same pattern but without optimizations. */ inline void *operator new (__SIZE_TYPE__, void *__p) { return __p; } struct __aligned_buffer { int _M_storage; int *_M_addr() { return &_M_storage; } }; struct _Hashtable_alloc { int _M_single_bucket; int *_M_buckets; _Hashtable_alloc () { _M_buckets = &_M_single_bucket; } ~_Hashtable_alloc () { delete _M_buckets; } // { dg-warning "on the stack" } }; void test01 (__aligned_buffer buf) { _Hashtable_alloc *tmp = new (buf._M_addr ()) _Hashtable_alloc; tmp->~_Hashtable_alloc (); }