/* { dg-do run } */ /* { dg-options "-O2" } */ extern void abort (void); extern char *strncpy(char *, const char *, __SIZE_TYPE__); union u { struct { char vi[8]; char pi[16]; }; char all[8+16+4]; }; void __attribute__((noinline,noclone)) f(union u *u) { char vi[8+1]; __builtin_strncpy(vi, u->vi, sizeof(u->vi)); if (__builtin_object_size (u->all, 1) != -1) abort (); } int main() { union u u; f (&u); return 0; }