diff options
Diffstat (limited to 'gcc/testsuite/gcc.dg/builtin-object-size-5.c')
-rw-r--r-- | gcc/testsuite/gcc.dg/builtin-object-size-5.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/builtin-object-size-5.c b/gcc/testsuite/gcc.dg/builtin-object-size-5.c new file mode 100644 index 000000000..4cb580ebc --- /dev/null +++ b/gcc/testsuite/gcc.dg/builtin-object-size-5.c @@ -0,0 +1,56 @@ +/* { dg-do compile { target i?86-*-linux* x86_64-*-linux* } } */ +/* { dg-options "-O2" } */ + +typedef __SIZE_TYPE__ size_t; +extern void abort (void); +extern char buf[0x40000000]; + +void +test1 (size_t x) +{ + char *p = &buf[8]; + size_t i; + + for (i = 0; i < x; ++i) + p = p + 4; + if (__builtin_object_size (p, 0) != sizeof (buf) - 8) + abort (); +} + +void +test2 (size_t x) +{ + char *p = &buf[8]; + size_t i; + + for (i = 0; i < x; ++i) + p = p + 4; + if (__builtin_object_size (p, 1) != sizeof (buf) - 8) + abort (); +} + +void +test3 (size_t x) +{ + char *p = &buf[8]; + size_t i; + + for (i = 0; i < x; ++i) + p = p + 4; + if (__builtin_object_size (p, 2) != 0) + abort (); +} + +void +test4 (size_t x) +{ + char *p = &buf[8]; + size_t i; + + for (i = 0; i < x; ++i) + p = p + 4; + if (__builtin_object_size (p, 3) != 0) + abort (); +} + +/* { dg-final { scan-assembler-not "abort" } } */ |