]>
Commit | Line | Data |
---|---|---|
49fb45c8 MS |
1 | /* PR middle-end/91647 - missing -Warray-bounds accessing a zero-length array |
2 | of a declared object | |
3 | { dg-do "compile" } | |
4 | { dg-options "-O2 -Wall" } */ | |
5 | ||
6 | struct __attribute__ ((aligned (16))) A16 | |
7 | { | |
8 | __INT64_TYPE__ i8; | |
9 | __INT16_TYPE__ i2; | |
10 | __INT16_TYPE__ a2[]; | |
11 | }; | |
12 | ||
13 | struct A16 a0 = { }; | |
14 | ||
15 | void test_a0 (void) | |
16 | { | |
17 | // The first three elements fit in the tail padding. | |
18 | a0.a2[0] = 0; a0.a2[1] = 1; a0.a2[2] = 2; | |
19 | ||
09f04139 | 20 | a0.a2[3] = 3; // { dg-warning "array subscript 3 is above array bounds of 'short int\\\[]'" } |
49fb45c8 MS |
21 | } |
22 | ||
23 | ||
24 | struct A16 a1 = { .a2 = { 1 } }; | |
25 | ||
26 | void test_a1 (void) | |
27 | { | |
28 | a1.a2[0] = 0; a1.a2[1] = 1; a1.a2[2] = 2; | |
29 | ||
09f04139 | 30 | a1.a2[3] = 3; // { dg-warning "array subscript 3 is above array bounds of 'short int\\\[]'" } |
49fb45c8 MS |
31 | } |
32 | ||
33 | ||
34 | struct A16 a2 = { .a2 = { 1, 2 } }; | |
35 | ||
36 | void test_a2 (void) | |
37 | { | |
38 | a2.a2[0] = 0; a2.a2[1] = 1; a2.a2[2] = 2; | |
39 | ||
09f04139 | 40 | a2.a2[3] = 3; // { dg-warning "array subscript 3 is above array bounds of 'short int\\\[]'" } |
49fb45c8 MS |
41 | } |
42 | ||
43 | ||
44 | struct A16 a3 = { .a2 = { 1, 2, 3 } }; | |
45 | ||
46 | void test_a3 (void) | |
47 | { | |
48 | a3.a2[0] = 0; a3.a2[1] = 1; a3.a2[2] = 2; | |
49 | ||
09f04139 | 50 | a3.a2[3] = 3; // { dg-warning "array subscript 3 is above array bounds of 'short int\\\[]'" } |
49fb45c8 MS |
51 | } |
52 | ||
53 | ||
54 | struct A16 a4 = { .a2 = { 1, 2, 3, 4 } }; | |
55 | ||
56 | void test_a4 (void) | |
57 | { | |
58 | a4.a2[0] = 0; a4.a2[1] = 1; a4.a2[2] = 2; a4.a2[3] = 3; | |
59 | ||
09f04139 | 60 | a4.a2[4] = 4; // { dg-warning "array subscript 4 is above array bounds of 'short int\\\[]'" } |
49fb45c8 MS |
61 | } |
62 | ||
63 | ||
64 | struct A16 a5 = { .a2 = { 1, 2, 3, 4, 5 } }; | |
65 | ||
66 | void test_a5 (void) | |
67 | { | |
68 | a5.a2[0] = 0; a5.a2[1] = 1; a5.a2[2] = 2; a5.a2[3] = 3; a5.a2[4] = 4; | |
69 | ||
09f04139 | 70 | a5.a2[5] = 5; // { dg-warning "array subscript 5 is above array bounds of 'short int\\\[]'" } |
49fb45c8 MS |
71 | } |
72 | ||
73 | ||
74 | struct A16 a6 = { .a2 = { 1, 2, 3, 4, 5, 6 } }; | |
75 | ||
76 | void test_a6 (void) | |
77 | { | |
78 | a6.a2[0] = 0; a6.a2[1] = 1; a6.a2[2] = 2; a6.a2[3] = 3; a6.a2[4] = 4; | |
79 | a6.a2[5] = 5; | |
80 | ||
09f04139 | 81 | a6.a2[6] = 6; // { dg-warning "array subscript 6 is above array bounds of 'short int\\\[]'" } |
49fb45c8 MS |
82 | } |
83 | ||
84 | ||
85 | struct A16 a7 = { .a2 = { 1, 2, 3, 4, 5, 6, 7 } }; | |
86 | ||
87 | void test_a7 (void) | |
88 | { | |
89 | a7.a2[0] = 0; a7.a2[1] = 1; a7.a2[2] = 2; a7.a2[3] = 3; a7.a2[4] = 4; | |
90 | a7.a2[5] = 5; a7.a2[5] = 5; a7.a2[6] = 6; | |
91 | ||
09f04139 | 92 | a7.a2[7] = 7; // { dg-warning "array subscript 7 is above array bounds of 'short int\\\[]'" } |
49fb45c8 MS |
93 | } |
94 | ||
95 | ||
96 | struct A16 a8 = { .a2 = { 1, 2, 3, 4, 5, 6, 7, 8 } }; | |
97 | ||
98 | void test_a8 (void) | |
99 | { | |
100 | a8.a2[0] = 0; a8.a2[1] = 1; a8.a2[2] = 2; a8.a2[3] = 3; a8.a2[4] = 4; | |
101 | a8.a2[5] = 5; a8.a2[5] = 5; a8.a2[6] = 6; a8.a2[7] = 7; | |
102 | ||
09f04139 | 103 | a8.a2[8] = 8; // { dg-warning "array subscript 8 is above array bounds of 'short int\\\[]'" } |
49fb45c8 MS |
104 | } |
105 | ||
106 | ||
107 | struct A16 a9 = { .a2 = { 1, 2, 3, 4, 5, 6, 7, 8, 9 } }; | |
108 | ||
109 | void test_a9 (void) | |
110 | { | |
111 | a8.a2[0] = 8; a8.a2[1] = 7; a8.a2[2] = 6; a8.a2[3] = 5; a8.a2[4] = 4; | |
112 | a8.a2[5] = 3; a8.a2[5] = 2; a8.a2[6] = 1; a8.a2[7] = 0; | |
113 | ||
09f04139 | 114 | a8.a2[9] = 8; // { dg-warning "array subscript 9 is above array bounds of 'short int\\\[]'" } |
49fb45c8 | 115 | } |