Viewing file: Wstringop-overflow-7.C (1.06 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* PR c++/100876 - -Wmismatched-new-delete should either look through or ignore placement new { dg-do compile } { dg-options "-O0 -Wall -Wno-array-bounds" } */
inline void* operator new (__SIZE_TYPE__, void *p) { return p; } inline void* operator new[] (__SIZE_TYPE__, void *p) { return p; }
void* nowarn_placement_new_memset () { struct S { int i; }; void *p = __builtin_malloc (sizeof (S)); S *q = new (p) S; __builtin_memset (q, 0, sizeof (S)); return q; }
void* warn_placement_new_memset () { struct S { int i; }; void *p = __builtin_malloc (sizeof (S)); S *q = new (p) S; __builtin_memset (q, 0, sizeof (S) + 1); // { dg-warning "\\\[-Wstringop-overflow" } return q; }
void* nowarn_placement_new_array_strncpy (const char *s) { void *p = __builtin_malloc (5); char *q = new (p) char[5]; __builtin_strncpy (q, s, 5); return q;
}
void* warn_placement_new_array_strncpy (const char *s) { void *p = __builtin_malloc (4); char *q = new (p) char[5]; __builtin_strncpy (q, s, 5); // { dg-warning "\\\[-Wstringop-overflow" } return q; }
|