/*
  { dg-do compile }
  { dg-options "-Wall" } */

typedef __SIZE_TYPE__ size_t;

int memcmp (const void*, const void*, size_t);
int strncmp (const char*, const char*, size_t);
char* stpncpy (char*, const char*, size_t);
char* strncpy (char*, const char*, size_t);

extern char a4[4], b5[5];

struct A { char a4[4]; };

extern volatile int i;
extern void* volatile ptr;

void test_stpncpy (struct A *p)
{
  ptr = stpncpy (a4, b5, 4);
  ptr = stpncpy (a4, b5, 5);      // { dg-warning "writing 5 bytes" }

  ptr = stpncpy (p->a4, b5, 4);
  ptr = stpncpy (p->a4, b5, 5);   // { dg-warning "writing 5 bytes" }
}

void test_strncpy (struct A *p)
{
  ptr = strncpy (a4, b5, 4);
  ptr = strncpy (a4, b5, 5);      // { dg-warning "writing 5 bytes" }

  ptr = strncpy (p->a4, b5, 4);
  ptr = strncpy (p->a4, b5, 5);   // { dg-warning "writing 5 bytes" }
}