131
|
1 /* PR middle-end/83373 - False positive reported by -Wstringop-overflow
|
|
2 { dg-do compile }
|
|
3 { dg-options "-O2 -Wstringop-overflow" } */
|
|
4
|
|
5 typedef __SIZE_TYPE__ size_t;
|
|
6
|
|
7 char buf[100];
|
|
8
|
|
9 void get_data (char*);
|
|
10
|
|
11 __attribute__ ((nonnull(1, 2)))
|
|
12 inline char* my_strcpy (char* dst, const char* src, size_t size)
|
|
13 {
|
|
14 size_t len = __builtin_strlen (src);
|
|
15 if (len < size)
|
|
16 __builtin_memcpy (dst, src, len + 1);
|
|
17 else
|
|
18 {
|
|
19 __builtin_memcpy (dst, src, size - 1); /* { dg-bogus "\\\[-Wstringop-oveflow]" } */
|
|
20 dst[size - 1] = '\0';
|
|
21 }
|
|
22
|
|
23 return dst;
|
|
24 }
|
|
25
|
|
26 void test(void)
|
|
27 {
|
|
28 char data[20] = "12345";
|
|
29
|
|
30 get_data (data);
|
|
31
|
|
32 my_strcpy (buf, data, sizeof buf);
|
|
33 }
|