annotate gcc/testsuite/c-c++-common/Warray-bounds-2.c @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents
children 1830386684a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
1 /* Test to exercise that -Warray-bounds warnings for memory and string
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2 functions are issued even when they are declared in system headers
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3 (i.e., not just when they are explicitly declared in the source
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4 file.)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5 Also verify that the warnings are issued even for calls where the
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6 source of the excessive array bound is in a different function than
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7 the call.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8 { dg-do compile }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9 { dg-options "-O2 -Warray-bounds -Wno-stringop-overflow" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 #include <stddef.h>
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 #include <string.h>
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14 #undef memcpy
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 #undef strcpy
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16 #undef strncpy
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18 #define MAX (__SIZE_MAX__ / 2)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20 void sink (void*);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22 struct __attribute__ ((packed)) Array
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24 char a13[13];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25 char a15[15];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26 char a17[17];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 /* Exercise memcpy out-of-bounds offsets with an array of known size. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31 static void
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32 wrap_memcpy_src_xsize (char *d, const char *s, ptrdiff_t i, size_t n)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34 memcpy (d, s + i, n); /* { dg-warning "offset 46 is out of the bounds \\\[0, 45] of object .ar. with type .(struct )?Array." "memcpy" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 void call_memcpy_src_xsize (char *d, size_t n)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39 struct Array ar;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40 sink (&ar);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41 wrap_memcpy_src_xsize (d, ar.a13, 46, n);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42 sink (&ar);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45 /* Exercise memcpy out-of-bounds offsets with an array of unknown size. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
46
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
47 static void
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48 wrap_memcpy_src_diff_max (char *d, const char *s, ptrdiff_t i, size_t n)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
49 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
50 memcpy (d, s + i, n); /* { dg-warning "pointer overflow between offset \[0-9\]+ and size 3" "memcpy" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
51 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
52
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
53 void call_memcpy_src_diff_max (char *d, const char *s, size_t n)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
54 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
55 wrap_memcpy_src_diff_max (d, s, MAX, 3);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
56 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
57
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
58 static void
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
59 wrap_memcpy_dst_xsize (char *d, const char *s, ptrdiff_t i, size_t n)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
60 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
61 memcpy (d + i, s, n); /* { dg-warning "offset 47 is out of the bounds \\\[0, 45] of object .ar1. with type .(struct )?Array." "memcpy" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
62 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
63
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
64 void call_memcpy_dst_xsize (const char *s, size_t n)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
65 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
66 struct Array ar1; /* { dg-message ".ar1. declared here" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
67 sink (&ar1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
68 wrap_memcpy_dst_xsize (ar1.a15, s, 34, n);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
69 sink (&ar1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
70 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
71
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
72 static void
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
73 wrap_memcpy_dst_diff_max (char *d, const char *s, ptrdiff_t i, size_t n)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
74 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
75 memcpy (d + i, s, n); /* { dg-warning "offset -?\[0-9\]+ is out of the bounds \\\[0, 45] of object .ar2. with type .(struct )?Array." "memcpy" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
76 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
77
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
78 void call_memcpy_dst_diff_max (const char *s, size_t n)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
79 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
80 struct Array ar2; /* { dg-message ".ar2. declared here" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
81 sink (&ar2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
82 wrap_memcpy_dst_diff_max (ar2.a15, s, MAX, n);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
83 sink (&ar2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
84 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
85
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
86
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
87 static void wrap_strcat_src_xsize (char *d, const char *s, ptrdiff_t i)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
88 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
89 strcat (d, s + i); /* { dg-warning "offset 46 is out of the bounds \\\[0, 45] of object .ar3. with type .(struct )?Array." "strcat" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
90 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
91
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
92 void call_strcat_src_xsize (char *d)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
93 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
94 struct Array ar3; /* { dg-message ".ar3. declared here" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
95 sink (&ar3);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
96 wrap_strcat_src_xsize (d, ar3.a15, 15 + 17 + 1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
97 sink (&ar3);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
98 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
99
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
100 static void wrap_strcat_dst_xsize (char *d, const char *s, ptrdiff_t i)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
101 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
102 strcat (d + i, s); /* { dg-warning "offset 47 is out of the bounds \\\[0, 45] of object .ar4. with type .(struct )?Array." "strcat" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
103 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
104
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
105 void call_strcat_dst_xsize (const char *s)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
106 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
107 struct Array ar4; /* { dg-message ".ar4. declared here" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
108 sink (&ar4);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
109 wrap_strcat_dst_xsize (ar4.a15, s, 15 + 17 + 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
110 sink (&ar4);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
111 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
112
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
113
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
114 static void wrap_strcpy_src_xsize (char *d, const char *s, ptrdiff_t i)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
115 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
116 strcpy (d, s + i); /* { dg-warning "offset 48 is out of the bounds \\\[0, 45] of object .ar5. with type .(struct )?Array." "strcpy" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
117 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
118
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
119 void call_strcpy_src_xsize (char *d)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
120 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
121 struct Array ar5; /* { dg-message ".ar5. declared here" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
122 sink (&ar5);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
123 wrap_strcpy_src_xsize (d, ar5.a15, 15 + 17 + 3);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
124 sink (&ar5);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
125 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
126
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
127 static void wrap_strcpy_dst_xsize (char *d, const char *s, ptrdiff_t i)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
128 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
129 strcpy (d + i, s); /* { dg-warning "offset 49 is out of the bounds \\\[0, 45] of object .ar6. with type .(struct )?Array." "strcpy" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
130 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
132 void call_strcpy_dst_xsize (const char *s)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
133 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
134 struct Array ar6; /* { dg-message ".ar6. declared here" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
135 sink (&ar6);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
136 wrap_strcpy_dst_xsize (ar6.a15, s, 15 + 17 + 4);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
137 sink (&ar6);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
138 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
139
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
140
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
141 /* Exercise strncpy out-of-bounds offsets with an array of known size. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
142
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
143 static void
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
144 wrap_strncpy_src_xsize (char *d, const char *s, ptrdiff_t i, size_t n)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
145 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
146 strncpy (d, s + i, n); /* { dg-warning "offset 46 is out of the bounds \\\[0, 45] of object .ar7. with type '(struct )?Array." "strncpy" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
147 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
148
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
149 void call_strncpy_src_xsize (char *d, size_t n)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
150 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
151 struct Array ar7; /* { dg-message ".ar7. declared here" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
152 sink (&ar7);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
153 wrap_strncpy_src_xsize (d, ar7.a17, 17 + 1, n);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
154 sink (&ar7);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
155 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
156
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
157 /* Exercise strncpy out-of-bounds offsets with an array of unknown size. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
158
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
159 static void
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
160 wrap_strncpy_src_diff_max (char *d, const char *s, ptrdiff_t i, size_t n)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
161 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
162 /* Unlike in the similar call to memcpy(), there is no pointer
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
163 overflow here because the size N is not added to the source
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
164 offset. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
165 strncpy (d, s + i, n);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
166 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
167
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
168 void call_strncpy_src_diff_max (char *d, const char *s, size_t n)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
169 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
170 wrap_strncpy_src_diff_max (d, s, MAX, 3);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
171 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
172
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
173 static void
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
174 wrap_strncpy_dst_xsize (char *d, const char *s, ptrdiff_t i, size_t n)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
175 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
176 strncpy (d + i, s, n); /* { dg-warning "offset 47 is out of the bounds \\\[0, 45] of object .ar8. with type .(struct )?Array." "strncpy" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
177 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
178
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
179 void call_strncpy_dst_xsize (const char *s, size_t n)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
180 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
181 struct Array ar8; /* { dg-message ".ar8. declared here" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
182 sink (&ar8);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
183 wrap_strncpy_dst_xsize (ar8.a17, s, 17 + 2, n);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
184 sink (&ar8);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
185 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
186
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
187 static void
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
188 wrap_strncpy_dst_diff_max (char *d, const char *s, ptrdiff_t i, size_t n)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
189 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
190 strncpy (d + i, s, n); /* { dg-warning "offset -\[0-9\]+ is out of the bounds \\\[0, 45] of object .ar9. with type .(struct )?Array." "strncpy" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
191 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
192
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
193 void call_strncpy_dst_diff_max (const char *s, size_t n)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
194 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
195 struct Array ar9; /* { dg-message ".ar9. declared here" "strncpy" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
196 sink (&ar9);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
197 wrap_strncpy_dst_diff_max (ar9.a17, s, MAX, n);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
198 sink (&ar9);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
199 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
200
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
201 static void
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
202 wrap_strncpy_dstarray_diff_neg (char *d, const char *s, ptrdiff_t i, size_t n)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
203 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
204 strncpy (d + i, s, n); /* { dg-warning "offset -\[0-9\]+ is out of the bounds \\\[0, 90] of object .ar10. with type .(struct )?Array ?\\\[2]." "strncpy" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
205 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
206
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
207 void call_strncpy_dstarray_diff_neg (const char *s, size_t n)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
208 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
209 struct Array ar10[2]; /* { dg-message ".ar10. declared here" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
210 sink (&ar10);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
211
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
212 int off = (char*)ar10[1].a17 - (char*)ar10 + 1;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
213 wrap_strncpy_dstarray_diff_neg (ar10[1].a17, s, -off, n);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
214
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
215 sink (&ar10);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
216 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
217
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
218 /* { dg-prune-output "outside array bounds" } */