Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/gcc.dg/Warray-bounds-49.c @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
131:84e7813d76e9 | 145:1830386684a0 |
---|---|
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 } |