annotate gcc/testsuite/c-c++-common/Warray-bounds-7.c @ 145:1830386684a0

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