]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/testsuite/c-c++-common/Warray-bounds-9.c
Correct handling of variable offset minus constant in -Warray-bounds [PR100137]
[thirdparty/gcc.git] / gcc / testsuite / c-c++-common / Warray-bounds-9.c
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
6 #define NOIPA __attribute__ ((noipa))
7
8 void sink (void*, ...);
9 #define T(a, x) sink (a, x)
10
11
12 NOIPA void a_0_n (int n)
13 {
14 int a[0][n];
15
16 sink (a);
17
18 T (a, ((int *) a)[0]); // { dg-warning "\\\[-Warray-bounds" }
19 T (a, ((char *) a)[1]); // { dg-warning "\\\[-Warray-bounds" }
20 T (a, ((float *) a)[n]); // { dg-warning "\\\[-Warray-bounds" }
21 }
22
23 NOIPA void a_n_0 (int n)
24 {
25 int a[n][0];
26
27 sink (a);
28
29 T (a, ((int *) a)[0]); // { dg-warning "\\\[-Warray-bounds" }
30 T (a, ((char *) a)[1]); // { dg-warning "\\\[-Warray-bounds" }
31 T (a, ((float *) a)[n]); // { dg-warning "\\\[-Warray-bounds" }
32 }
33
34
35 NOIPA void a_1_n_0 (int n)
36 {
37 int a[1][n][0];
38
39 sink (a);
40
41 T (a, ((int *) a)[0]); // { dg-warning "\\\[-Warray-bounds" }
42 T (a, ((char *) a)[1]); // { dg-warning "\\\[-Warray-bounds" }
43 T (a, ((float *) a)[n]); // { dg-warning "\\\[-Warray-bounds" }
44 }
45
46 NOIPA void a_1_0_n (int n)
47 {
48 int a[1][0][n];
49
50 sink (a);
51
52 T (a, ((int *) a)[0]); // { dg-warning "\\\[-Warray-bounds" }
53 T (a, ((char *) a)[1]); // { dg-warning "\\\[-Warray-bounds" }
54 T (a, ((float *) a)[n]); // { dg-warning "\\\[-Warray-bounds" }
55 }
56
57 NOIPA void a_0_1_n (int n)
58 {
59 int a[0][1][n];
60
61 sink (a);
62
63 T (a, ((int *) a)[0]); // { dg-warning "\\\[-Warray-bounds" }
64 T (a, ((char *) a)[1]); // { dg-warning "\\\[-Warray-bounds" }
65 T (a, ((float *) a)[n]); // { dg-warning "\\\[-Warray-bounds" }
66 }
67
68 NOIPA void a_0_n_1 (int n)
69 {
70 int a[0][n][1];
71
72 sink (a);
73
74 T (a, ((int *) a)[0]); // { dg-warning "\\\[-Warray-bounds" }
75 T (a, ((char *) a)[1]); // { dg-warning "\\\[-Warray-bounds" }
76 T (a, ((float *) a)[n]); // { dg-warning "\\\[-Warray-bounds" }
77 }
78
79 NOIPA void a_n_0_n (int n)
80 {
81 int a[n][0][n];
82
83 sink (a);
84
85 T (a, ((int *) a)[0]); // { dg-warning "\\\[-Warray-bounds" }
86 T (a, ((char *) a)[1]); // { dg-warning "\\\[-Warray-bounds" }
87 T (a, ((float *) a)[n]); // { dg-warning "\\\[-Warray-bounds" }
88 }
89
90 NOIPA void a_n_n_0 (int n)
91 {
92 int a[n][n][0];
93
94 sink (a);
95
96 T (a, ((int *) a)[0]); // { dg-warning "\\\[-Warray-bounds" }
97 T (a, ((char *) a)[1]); // { dg-warning "\\\[-Warray-bounds" }
98 T (a, ((float *) a)[n]); // { dg-warning "\\\[-Warray-bounds" }
99 }
100
101 NOIPA void a_0_n_n (int n)
102 {
103 int a[0][n][n];
104
105 sink (a);
106
107 T (a, ((int *) a)[0]); // { dg-warning "\\\[-Warray-bounds" }
108 T (a, ((char *) a)[1]); // { dg-warning "\\\[-Warray-bounds" }
109 T (a, ((float *) a)[n]); // { dg-warning "\\\[-Warray-bounds" }
110 }
111
112 NOIPA void a_0_0_n (int n)
113 {
114 int a[0][0][n];
115
116 sink (a);
117
118 T (a, ((int *) a)[0]); // { dg-warning "\\\[-Warray-bounds" }
119 T (a, ((char *) a)[1]); // { dg-warning "\\\[-Warray-bounds" }
120 T (a, ((float *) a)[n]); // { dg-warning "\\\[-Warray-bounds" }
121 }
122
123 NOIPA void a_n_0_0 (int n)
124 {
125 int a[n][0][0];
126
127 sink (a);
128
129 T (a, ((int *) a)[0]); // { dg-warning "\\\[-Warray-bounds" }
130 T (a, ((char *) a)[1]); // { dg-warning "\\\[-Warray-bounds" }
131 T (a, ((float *) a)[n]); // { dg-warning "\\\[-Warray-bounds" }
132 }
133
134 NOIPA void a_n_n_n (int n)
135 {
136 int a[n][n][n];
137
138 sink (a);
139
140 T (a, ((int *) a)[-1]); // { dg-warning "\\\[-Warray-bounds" "pr99140" }
141 T (a, ((int *) a)[0]);
142 T (a, ((char *) a)[1]);
143 T (a, ((float *) a)[n]);
144 }