annotate gcc/testsuite/c-c++-common/ubsan/vla-1.c @ 131:84e7813d76e9

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