diff options
Diffstat (limited to 'gcc/testsuite/gcc.dg/builtin-dynamic-object-size-20.c')
-rw-r--r-- | gcc/testsuite/gcc.dg/builtin-dynamic-object-size-20.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/builtin-dynamic-object-size-20.c b/gcc/testsuite/gcc.dg/builtin-dynamic-object-size-20.c new file mode 100644 index 0000000..2c8e07d --- /dev/null +++ b/gcc/testsuite/gcc.dg/builtin-dynamic-object-size-20.c @@ -0,0 +1,49 @@ +/* PR 109334 + * { dg-do run } + * { dg-options "-O1" } */ + + +[[gnu::noinline,gnu::noipa]] +int f(int n, int buf[n]) + [[gnu::access(read_only, 2, 1)]] +{ + return __builtin_dynamic_object_size(buf, 0); +} + +[[gnu::noinline,gnu::noipa]] +int g(int n, int buf[]) + [[gnu::access(read_only, 2, 1)]] +{ + return __builtin_dynamic_object_size(buf, 0); +} + +[[gnu::noinline,gnu::noipa]] +int h(int n, int buf[n]) +{ + return __builtin_dynamic_object_size(buf, 0); +} + +int dummy(int x) { return x + 1; } + +[[gnu::noinline,gnu::noipa]] +int i(int n, int buf[dummy(n)]) +{ + return __builtin_dynamic_object_size(buf, 0); +} + +int main() +{ + int n = 10; + int buf[n]; + if (n * sizeof(int) != f(n, buf)) + __builtin_abort(); + if (n * sizeof(int) != g(n, buf)) + __builtin_abort(); + if (n * sizeof(int) != h(n, buf)) + __builtin_abort(); + + (void)i(n, buf); + + return 0; +} + |