145
|
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
|
|
20 a0.a2[3] = 3; // { dg-warning "array subscript 3 is above array bounds of 'short int\\\[0]'" }
|
|
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
|
|
30 a1.a2[3] = 3; // { dg-warning "array subscript 3 is above array bounds of 'short int\\\[0]'" }
|
|
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
|
|
40 a2.a2[3] = 3; // { dg-warning "array subscript 3 is above array bounds of 'short int\\\[0]'" }
|
|
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
|
|
50 a3.a2[3] = 3; // { dg-warning "array subscript 3 is above array bounds of 'short int\\\[0]'" }
|
|
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
|
|
60 a4.a2[4] = 4; // { dg-warning "array subscript 4 is above array bounds of 'short int\\\[0]'" }
|
|
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
|
|
70 a5.a2[5] = 5; // { dg-warning "array subscript 5 is above array bounds of 'short int\\\[0]'" }
|
|
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
|
|
81 a6.a2[6] = 6; // { dg-warning "array subscript 6 is above array bounds of 'short int\\\[0]'" }
|
|
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
|
|
92 a7.a2[7] = 7; // { dg-warning "array subscript 7 is above array bounds of 'short int\\\[0]'" }
|
|
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
|
|
103 a8.a2[8] = 8; // { dg-warning "array subscript 8 is above array bounds of 'short int\\\[0]'" }
|
|
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
|
|
114 a8.a2[9] = 8; // { dg-warning "array subscript 9 is above array bounds of 'short int\\\[0]'" }
|
|
115 }
|