/* { dg-do run } */ /* { dg-options "-fsanitize=vla-bound -Wall -Wno-unused-variable" } */ typedef long int V; int x = -1; double di = -3.2; V v = -6; static int __attribute__ ((noinline, noclone)) bar (void) { return -4; } static void __attribute__ ((noinline, noclone)) fn1 (void) { int a[x]; } static void __attribute__ ((noinline, noclone)) fn2 (void) { int a[x][x]; } static void __attribute__ ((noinline, noclone)) fn3 (void) { int a[x][x][x]; } static void __attribute__ ((noinline, noclone)) fn4 (void) { int b[x - 4]; } static void __attribute__ ((noinline, noclone)) fn5 (void) { int c[(int) di]; } static void __attribute__ ((noinline, noclone)) fn6 (void) { int d[1 + x]; } static void __attribute__ ((noinline, noclone)) fn7 (void) { int e[1 ? x : -1]; } static void __attribute__ ((noinline, noclone)) fn8 (void) { int f[++x]; } static void __attribute__ ((noinline, noclone)) fn9 (void) { int g[(signed char) --x]; } static void __attribute__ ((noinline, noclone)) fn10 (void) { int h[(++x, --x, x)]; } static void __attribute__ ((noinline, noclone)) fn11 (void) { int i[v]; } static void __attribute__ ((noinline, noclone)) fn12 (void) { int j[bar ()]; } int main (void) { fn1 (); fn2 (); fn3 (); fn4 (); fn5 (); fn6 (); fn7 (); fn8 (); fn9 (); fn10 (); fn11 (); fn12 (); return 0; } /* { dg-output "variable length array bound evaluates to non-positive value -1(\n|\r\n|\r)" } */ /* { dg-output "\[^\n\r]*variable length array bound evaluates to non-positive value -1(\n|\r\n|\r)" } */ /* { dg-output "\[^\n\r]*variable length array bound evaluates to non-positive value -1(\n|\r\n|\r)" } */ /* { dg-output "\[^\n\r]*variable length array bound evaluates to non-positive value -1(\n|\r\n|\r)" } */ /* { dg-output "\[^\n\r]*variable length array bound evaluates to non-positive value -1(\n|\r\n|\r)" } */ /* { dg-output "\[^\n\r]*variable length array bound evaluates to non-positive value -1(\n|\r\n|\r)" } */ /* { dg-output "\[^\n\r]*variable length array bound evaluates to non-positive value -5(\n|\r\n|\r)" } */ /* { dg-output "\[^\n\r]*variable length array bound evaluates to non-positive value -3(\n|\r\n|\r)" } */ /* { dg-output "\[^\n\r]*variable length array bound evaluates to non-positive value 0(\n|\r\n|\r)" } */ /* { dg-output "\[^\n\r]*variable length array bound evaluates to non-positive value -1(\n|\r\n|\r)" } */ /* { dg-output "\[^\n\r]*variable length array bound evaluates to non-positive value 0(\n|\r\n|\r)" } */ /* { dg-output "\[^\n\r]*variable length array bound evaluates to non-positive value -1(\n|\r\n|\r)" } */ /* { dg-output "\[^\n\r]*variable length array bound evaluates to non-positive value -1(\n|\r\n|\r)" } */ /* { dg-output "\[^\n\r]*variable length array bound evaluates to non-positive value -6(\n|\r\n|\r)" } */ /* { dg-output "\[^\n\r]*variable length array bound evaluates to non-positive value -4" } */