145
|
1 /* PR middle-end/91490 - bogus argument missing terminating nul warning
|
|
2 on strlen of a flexible array member
|
|
3 { dg-do compile }
|
|
4 { dg-options "-Wall -ftrack-macro-expansion=0" } */
|
|
5
|
|
6 #define INT_MAX __INT_MAX__
|
|
7 #define PTRDIFF_MAX __PTRDIFF_MAX__
|
|
8 #define SIZE_MAX __SIZE_MAX__
|
|
9
|
|
10 struct A0 { char n, a[0]; };
|
|
11 struct A1 { char n, a[1]; };
|
|
12 struct Ax { char n, a[]; };
|
|
13
|
|
14 const struct A0 a0 = { };
|
|
15 const struct A0 a0_0 = { 0 };
|
|
16 const struct A0 a0_0_ = { 0, { } };
|
|
17
|
|
18 const struct A0 a1 = { };
|
|
19 const struct A0 a1_0 = { 0 };
|
|
20 const struct A0 a1_0_ = { 0, { } };
|
|
21
|
|
22 const struct Ax ax= { };
|
|
23 const struct Ax ax_0 = { 0 };
|
|
24 const struct Ax ax_0_ = { 0, { } };
|
|
25
|
|
26 void sink (unsigned);
|
|
27
|
|
28 #define T(x) sink (__builtin_strlen (x))
|
|
29
|
|
30 void test_zero_length_array (void)
|
|
31 {
|
|
32 T (a0.a); // { dg-warning "\\\[-Warray-bounds" }
|
|
33 T (a0.a - 1); // { dg-warning "\\\[-Warray-bounds" }
|
|
34 T (a0.a + 1); // { dg-warning "\\\[-Warray-bounds" }
|
|
35 T (a0.a + 9); // { dg-warning "\\\[-Warray-bounds" }
|
|
36 T (a0.a + INT_MAX); // { dg-warning "\\\[-Warray-bounds" }
|
|
37 T (a0.a + PTRDIFF_MAX); // { dg-warning "\\\[-Warray-bounds" }
|
|
38 T (a0.a + SIZE_MAX); // { dg-warning "\\\[-Warray-bounds" }
|
|
39
|
|
40 T (a0_0.a); // { dg-warning "\\\[-Warray-bounds" }
|
|
41 T (a0_0.a - 1); // { dg-warning "\\\[-Warray-bounds" }
|
|
42 T (a0_0.a + 1); // { dg-warning "\\\[-Warray-bounds" }
|
|
43 T (a0_0.a + 9); // { dg-warning "\\\[-Warray-bounds" }
|
|
44 T (a0_0.a + INT_MAX); // { dg-warning "\\\[-Warray-bounds" }
|
|
45 T (a0_0.a + PTRDIFF_MAX); // { dg-warning "\\\[-Warray-bounds" }
|
|
46 T (a0_0.a + SIZE_MAX); // { dg-warning "\\\[-Warray-bounds" }
|
|
47
|
|
48 T (a0_0_.a); // { dg-warning "\\\[-Warray-bounds" }
|
|
49 T (a0_0_.a - 1); // { dg-warning "\\\[-Warray-bounds" }
|
|
50 T (a0_0_.a + 1); // { dg-warning "\\\[-Warray-bounds" }
|
|
51 T (a0_0_.a + 9); // { dg-warning "\\\[-Warray-bounds" }
|
|
52 T (a0_0_.a + INT_MAX); // { dg-warning "\\\[-Warray-bounds" }
|
|
53 T (a0_0_.a + PTRDIFF_MAX); // { dg-warning "\\\[-Warray-bounds" }
|
|
54 T (a0_0_.a + SIZE_MAX); // { dg-warning "\\\[-Warray-bounds" }
|
|
55 }
|
|
56
|
|
57 void test_one_element_array (void)
|
|
58 {
|
|
59 T (a1.a - 1); // { dg-warning "\\\[-Warray-bounds" }
|
|
60 T (a1.a + 1); // { dg-warning "\\\[-Warray-bounds" }
|
|
61 T (a1.a + 9); // { dg-warning "\\\[-Warray-bounds" }
|
|
62 T (a1.a + INT_MAX); // { dg-warning "\\\[-Warray-bounds" }
|
|
63 T (a1.a + PTRDIFF_MAX); // { dg-warning "\\\[-Warray-bounds" }
|
|
64 T (a1.a + SIZE_MAX); // { dg-warning "\\\[-Warray-bounds" }
|
|
65
|
|
66 T (a1_0.a - 1); // { dg-warning "\\\[-Warray-bounds" }
|
|
67 T (a1_0.a + 1); // { dg-warning "\\\[-Warray-bounds" }
|
|
68 T (a1_0.a + 9); // { dg-warning "\\\[-Warray-bounds" }
|
|
69 T (a1_0.a + INT_MAX); // { dg-warning "\\\[-Warray-bounds" }
|
|
70 T (a1_0.a + PTRDIFF_MAX); // { dg-warning "\\\[-Warray-bounds" }
|
|
71 T (a1_0.a + SIZE_MAX); // { dg-warning "\\\[-Warray-bounds" }
|
|
72
|
|
73 T (a1_0_.a - 1); // { dg-warning "\\\[-Warray-bounds" }
|
|
74 T (a1_0_.a + 1); // { dg-warning "\\\[-Warray-bounds" }
|
|
75 T (a1_0_.a + 9); // { dg-warning "\\\[-Warray-bounds" }
|
|
76 T (a1_0_.a + INT_MAX); // { dg-warning "\\\[-Warray-bounds" }
|
|
77 T (a1_0_.a + PTRDIFF_MAX); // { dg-warning "\\\[-Warray-bounds" }
|
|
78 T (a1_0_.a + SIZE_MAX); // { dg-warning "\\\[-Warray-bounds" }
|
|
79 }
|
|
80
|
|
81 void test_flexible_array_member (void)
|
|
82 {
|
|
83 T (ax.a); // { dg-warning "\\\[-Warray-bounds" }
|
|
84 T (ax.a - 1); // { dg-warning "\\\[-Warray-bounds" }
|
|
85 T (ax.a + 1); // { dg-warning "\\\[-Warray-bounds" }
|
|
86 T (ax.a + 9); // { dg-warning "\\\[-Warray-bounds" }
|
|
87 T (ax.a + INT_MAX); // { dg-warning "\\\[-Warray-bounds" }
|
|
88 T (ax.a + PTRDIFF_MAX); // { dg-warning "\\\[-Warray-bounds" }
|
|
89 T (ax.a + SIZE_MAX); // { dg-warning "\\\[-Warray-bounds" }
|
|
90
|
|
91 T (ax_0.a); // { dg-warning "\\\[-Warray-bounds" }
|
|
92 T (ax_0.a - 1); // { dg-warning "\\\[-Warray-bounds" }
|
|
93 T (ax_0.a + 1); // { dg-warning "\\\[-Warray-bounds" }
|
|
94 T (ax_0.a + 9); // { dg-warning "\\\[-Warray-bounds" }
|
|
95 T (ax_0.a + INT_MAX); // { dg-warning "\\\[-Warray-bounds" }
|
|
96 T (ax_0.a + PTRDIFF_MAX); // { dg-warning "\\\[-Warray-bounds" }
|
|
97 T (ax_0.a + SIZE_MAX); // { dg-warning "\\\[-Warray-bounds" }
|
|
98
|
|
99 T (ax_0_.a); // { dg-warning "\\\[-Warray-bounds" }
|
|
100 T (ax_0_.a - 1); // { dg-warning "\\\[-Warray-bounds" }
|
|
101 T (ax_0_.a + 1); // { dg-warning "\\\[-Warray-bounds" }
|
|
102 T (ax_0_.a + 9); // { dg-warning "\\\[-Warray-bounds" }
|
|
103 T (ax_0_.a + INT_MAX); // { dg-warning "\\\[-Warray-bounds" }
|
|
104 T (ax_0_.a + PTRDIFF_MAX); // { dg-warning "\\\[-Warray-bounds" }
|
|
105 T (ax_0_.a + SIZE_MAX); // { dg-warning "\\\[-Warray-bounds" }
|
|
106 }
|
|
107
|