111
|
1 /* { dg-do run } */
|
131
|
2 /* { dg-options "-fsanitize=vla-bound -Wall -Wno-unused-variable -fno-stack-clash-protection" } */
|
111
|
3
|
|
4 typedef long int V;
|
|
5 int x = -1;
|
|
6 double di = -3.2;
|
|
7 V v = -6;
|
|
8
|
|
9 static int __attribute__ ((noinline, noclone))
|
|
10 bar (void)
|
|
11 {
|
|
12 return -4;
|
|
13 }
|
|
14
|
|
15 static void __attribute__ ((noinline, noclone))
|
|
16 fn1 (void)
|
|
17 {
|
|
18 int a[x];
|
|
19 }
|
|
20
|
|
21 static void __attribute__ ((noinline, noclone))
|
|
22 fn2 (void)
|
|
23 {
|
|
24 int a[x][x];
|
|
25 }
|
|
26
|
|
27 static void __attribute__ ((noinline, noclone))
|
|
28 fn3 (void)
|
|
29 {
|
|
30 int a[x][x][x];
|
|
31 }
|
|
32
|
|
33 static void __attribute__ ((noinline, noclone))
|
|
34 fn4 (void)
|
|
35 {
|
|
36 int b[x - 4];
|
|
37 }
|
|
38
|
|
39 static void __attribute__ ((noinline, noclone))
|
|
40 fn5 (void)
|
|
41 {
|
|
42 int c[(int) di];
|
|
43 }
|
|
44
|
|
45 static void __attribute__ ((noinline, noclone))
|
|
46 fn6 (void)
|
|
47 {
|
|
48 int d[1 + x];
|
|
49 }
|
|
50
|
|
51 static void __attribute__ ((noinline, noclone))
|
|
52 fn7 (void)
|
|
53 {
|
|
54 int e[1 ? x : -1];
|
|
55 }
|
|
56
|
|
57 static void __attribute__ ((noinline, noclone))
|
|
58 fn8 (void)
|
|
59 {
|
|
60 int f[++x];
|
|
61 }
|
|
62
|
|
63 static void __attribute__ ((noinline, noclone))
|
|
64 fn9 (void)
|
|
65 {
|
|
66 int g[(signed char) --x];
|
|
67 }
|
|
68
|
|
69 static void __attribute__ ((noinline, noclone))
|
|
70 fn10 (void)
|
|
71 {
|
|
72 int h[(++x, --x, x)];
|
|
73 }
|
|
74
|
|
75 static void __attribute__ ((noinline, noclone))
|
|
76 fn11 (void)
|
|
77 {
|
|
78 int i[v];
|
|
79 }
|
|
80
|
|
81 static void __attribute__ ((noinline, noclone))
|
|
82 fn12 (void)
|
|
83 {
|
|
84 int j[bar ()];
|
|
85 }
|
|
86
|
|
87 int
|
|
88 main (void)
|
|
89 {
|
|
90 fn1 ();
|
|
91 fn2 ();
|
|
92 fn3 ();
|
|
93 fn4 ();
|
|
94 fn5 ();
|
|
95 fn6 ();
|
|
96 fn7 ();
|
|
97 fn8 ();
|
|
98 fn9 ();
|
|
99 fn10 ();
|
|
100 fn11 ();
|
|
101 fn12 ();
|
|
102 return 0;
|
|
103 }
|
|
104
|
|
105 /* { dg-output "variable length array bound evaluates to non-positive value -1\[^\n\r]*(\n|\r\n|\r)" } */
|
|
106 /* { dg-output "\[^\n\r]*variable length array bound evaluates to non-positive value -1\[^\n\r]*(\n|\r\n|\r)" } */
|
|
107 /* { dg-output "\[^\n\r]*variable length array bound evaluates to non-positive value -1\[^\n\r]*(\n|\r\n|\r)" } */
|
|
108 /* { dg-output "\[^\n\r]*variable length array bound evaluates to non-positive value -1\[^\n\r]*(\n|\r\n|\r)" } */
|
|
109 /* { dg-output "\[^\n\r]*variable length array bound evaluates to non-positive value -1\[^\n\r]*(\n|\r\n|\r)" } */
|
|
110 /* { dg-output "\[^\n\r]*variable length array bound evaluates to non-positive value -1\[^\n\r]*(\n|\r\n|\r)" } */
|
|
111 /* { dg-output "\[^\n\r]*variable length array bound evaluates to non-positive value -5\[^\n\r]*(\n|\r\n|\r)" } */
|
|
112 /* { dg-output "\[^\n\r]*variable length array bound evaluates to non-positive value -3\[^\n\r]*(\n|\r\n|\r)" } */
|
|
113 /* { dg-output "\[^\n\r]*variable length array bound evaluates to non-positive value 0\[^\n\r]*(\n|\r\n|\r)" } */
|
|
114 /* { dg-output "\[^\n\r]*variable length array bound evaluates to non-positive value -1\[^\n\r]*(\n|\r\n|\r)" } */
|
|
115 /* { dg-output "\[^\n\r]*variable length array bound evaluates to non-positive value 0\[^\n\r]*(\n|\r\n|\r)" } */
|
|
116 /* { dg-output "\[^\n\r]*variable length array bound evaluates to non-positive value -1\[^\n\r]*(\n|\r\n|\r)" } */
|
|
117 /* { dg-output "\[^\n\r]*variable length array bound evaluates to non-positive value -1\[^\n\r]*(\n|\r\n|\r)" } */
|
|
118 /* { dg-output "\[^\n\r]*variable length array bound evaluates to non-positive value -6\[^\n\r]*(\n|\r\n|\r)" } */
|
|
119 /* { dg-output "\[^\n\r]*variable length array bound evaluates to non-positive value -4" } */
|