(root)/
gcc-13.2.0/
gcc/
testsuite/
g++.dg/
warn/
Wstringop-overflow-7.C
/* 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;
}