1 /* PR tree-optimization/99121 - ICE in -Warray-bounds on a multidimensional
2 VLA
3 { dg-do compile }
4 { dg-options "-O2 -Wall -ftrack-macro-expansion=0" }
5 { dg-require-effective-target alloca } */
6
7 #define NOIPA __attribute__ ((noipa))
8
9 void sink (void*, ...);
10 #define T(a, x) sink (a, x)
11
12
13 NOIPA void a_0_n (int n)
14 {
15 int a[0][n];
16
17 sink (a);
18
19 T (a, ((int *) a)[0]); // { dg-warning "\\\[-Warray-bounds" }
20 T (a, ((char *) a)[1]); // { dg-warning "\\\[-Warray-bounds" }
21 T (a, ((float *) a)[n]); // { dg-warning "\\\[-Warray-bounds" }
22 }
23
24 NOIPA void a_n_0 (int n)
25 {
26 int a[n][0];
27
28 sink (a);
29
30 T (a, ((int *) a)[0]); // { dg-warning "\\\[-Warray-bounds" }
31 T (a, ((char *) a)[1]); // { dg-warning "\\\[-Warray-bounds" }
32 T (a, ((float *) a)[n]); // { dg-warning "\\\[-Warray-bounds" }
33 }
34
35
36 NOIPA void a_1_n_0 (int n)
37 {
38 int a[1][n][0];
39
40 sink (a);
41
42 T (a, ((int *) a)[0]); // { dg-warning "\\\[-Warray-bounds" }
43 T (a, ((char *) a)[1]); // { dg-warning "\\\[-Warray-bounds" }
44 T (a, ((float *) a)[n]); // { dg-warning "\\\[-Warray-bounds" }
45 }
46
47 NOIPA void a_1_0_n (int n)
48 {
49 int a[1][0][n];
50
51 sink (a);
52
53 T (a, ((int *) a)[0]); // { dg-warning "\\\[-Warray-bounds" }
54 T (a, ((char *) a)[1]); // { dg-warning "\\\[-Warray-bounds" }
55 T (a, ((float *) a)[n]); // { dg-warning "\\\[-Warray-bounds" }
56 }
57
58 NOIPA void a_0_1_n (int n)
59 {
60 int a[0][1][n];
61
62 sink (a);
63
64 T (a, ((int *) a)[0]); // { dg-warning "\\\[-Warray-bounds" }
65 T (a, ((char *) a)[1]); // { dg-warning "\\\[-Warray-bounds" }
66 T (a, ((float *) a)[n]); // { dg-warning "\\\[-Warray-bounds" }
67 }
68
69 NOIPA void a_0_n_1 (int n)
70 {
71 int a[0][n][1];
72
73 sink (a);
74
75 T (a, ((int *) a)[0]); // { dg-warning "\\\[-Warray-bounds" }
76 T (a, ((char *) a)[1]); // { dg-warning "\\\[-Warray-bounds" }
77 T (a, ((float *) a)[n]); // { dg-warning "\\\[-Warray-bounds" }
78 }
79
80 NOIPA void a_n_0_n (int n)
81 {
82 int a[n][0][n];
83
84 sink (a);
85
86 T (a, ((int *) a)[0]); // { dg-warning "\\\[-Warray-bounds" }
87 T (a, ((char *) a)[1]); // { dg-warning "\\\[-Warray-bounds" }
88 T (a, ((float *) a)[n]); // { dg-warning "\\\[-Warray-bounds" }
89 }
90
91 NOIPA void a_n_n_0 (int n)
92 {
93 int a[n][n][0];
94
95 sink (a);
96
97 T (a, ((int *) a)[0]); // { dg-warning "\\\[-Warray-bounds" }
98 T (a, ((char *) a)[1]); // { dg-warning "\\\[-Warray-bounds" }
99 T (a, ((float *) a)[n]); // { dg-warning "\\\[-Warray-bounds" }
100 }
101
102 NOIPA void a_0_n_n (int n)
103 {
104 int a[0][n][n];
105
106 sink (a);
107
108 T (a, ((int *) a)[0]); // { dg-warning "\\\[-Warray-bounds" }
109 T (a, ((char *) a)[1]); // { dg-warning "\\\[-Warray-bounds" }
110 T (a, ((float *) a)[n]); // { dg-warning "\\\[-Warray-bounds" }
111 }
112
113 NOIPA void a_0_0_n (int n)
114 {
115 int a[0][0][n];
116
117 sink (a);
118
119 T (a, ((int *) a)[0]); // { dg-warning "\\\[-Warray-bounds" }
120 T (a, ((char *) a)[1]); // { dg-warning "\\\[-Warray-bounds" }
121 T (a, ((float *) a)[n]); // { dg-warning "\\\[-Warray-bounds" }
122 }
123
124 NOIPA void a_n_0_0 (int n)
125 {
126 int a[n][0][0];
127
128 sink (a);
129
130 T (a, ((int *) a)[0]); // { dg-warning "\\\[-Warray-bounds" }
131 T (a, ((char *) a)[1]); // { dg-warning "\\\[-Warray-bounds" }
132 T (a, ((float *) a)[n]); // { dg-warning "\\\[-Warray-bounds" }
133 }
134
135 NOIPA void a_n_n_n (int n)
136 {
137 int a[n][n][n];
138
139 sink (a);
140
141 T (a, ((int *) a)[-1]); // { dg-warning "\\\[-Warray-bounds" "pr99140" }
142 T (a, ((int *) a)[0]);
143 T (a, ((char *) a)[1]);
144 T (a, ((float *) a)[n]);
145 }