/* { dg-do run } */ /* { dg-shouldfail "asan" } */ /* { dg-skip-if "" { *-*-* } { "*" } { "-O0" } } */ #include typedef __SIZE_TYPE__ size_t; inline void * operator new (size_t, void *p) { return p; } struct vec { int size; }; struct vnull { operator vec() { return vec(); } }; vnull vNULL; struct A { A(): value2 (vNULL), value3 (vNULL) {} int value; vec value2; vec value3; }; int main() { int *array = (int *)malloc (sizeof (int) * 1); A *a = new (array) A (); free (array); } /* { dg-output "ERROR: AddressSanitizer: heap-buffer-overflow.*(\n|\r\n|\r)" } */ /* { dg-output " #0 0x\[0-9a-f\]+ +in (A::A\\\(\\\)|vnull::operator vec\\\(\\\).*(\n|\r\n|\r)" } */ /* { dg-output " #1 0x\[0-9a-f\]+ +in A::A\\\(\\\))" } */