diff options
Diffstat (limited to 'gcc-4.8/gcc/testsuite/gcc.dg/builtin-object-size-14.c')
-rw-r--r-- | gcc-4.8/gcc/testsuite/gcc.dg/builtin-object-size-14.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/builtin-object-size-14.c b/gcc-4.8/gcc/testsuite/gcc.dg/builtin-object-size-14.c new file mode 100644 index 000000000..085011eda --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.dg/builtin-object-size-14.c @@ -0,0 +1,28 @@ +/* { 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; +} |