/* 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; }