1 /* PR middle-end/88771 - Misleading -Werror=array-bounds error
2 Verify that the warning issued for calls to "bounded" string
3 functions is -Wstringop-overflow with the right wording.
4 { dg-do compile }
5 { dg-options "-O2 -Wall" } */
6
7 #define PTRDIFF_MAX __PTRDIFF_MAX__
8 #define SIZE_MAX __SIZE_MAX__
9
10 typedef __SIZE_TYPE__ size_t;
11
12 extern void* memcpy (void*, const void*, size_t);
13 extern void* memmove (void*, const void*, size_t);
14 extern void* memset (void*, int, size_t);
15
16 extern char* stpncpy (char*, const char*, size_t);
17
18 extern char* strncat (char*, const char*, size_t);
19 extern char* strncpy (char*, const char*, size_t);
20
21 extern char* strndup (const char*, size_t);
22
23 extern int strncmp (const char*, const char*, size_t);
24 extern int strncasecmp (const char*, const char*, size_t);
25
26 extern size_t strnlen (const char*, size_t);
27
28 extern char *d;
29 extern const char *s;
30
31
32 void test_memcpy (void)
33 {
34 memcpy (d, s, SIZE_MAX); /* { dg-warning ".memcpy. specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+ \\\[-Wstringop-overflow=\\\]" } */
35 }
36
37 void test_memmove (void)
38 {
39 memmove (d, s, SIZE_MAX - 1); /* { dg-warning ".memmove. specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+ \\\[-Wstringop-overflow=\\\]" } */
40 }
41
42 void test_memset (void)
43 {
44 memset (d, 0, SIZE_MAX - 2); /* { dg-warning ".memset. specified \(bound|size\) \[0-9\]+ exceeds maximum object size \[0-9\]+ \\\[-Wstringop-overflow=\\\]" } */
45 }
46
47
48 char* test_stpncpy (void)
49 {
50 return stpncpy (d, s, SIZE_MAX - 4); /* { dg-warning ".stpncpy. specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+ \\\[-Wstringop-overflow=\\\]" } */
51 }
52
53
54 void test_strncat (void)
55 {
56 strncat (d, s, SIZE_MAX - 3); /* { dg-warning ".strncat. specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+ \\\[-Wstringop-overflow=\\\]" } */
57 }
58
59 void test_strncpy (void)
60 {
61 strncpy (d, s, SIZE_MAX - 4); /* { dg-warning ".strncpy. specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+ \\\[-Wstringop-overflow=\\\]" } */
62 }
63
64 char* test_strndup (void)
65 {
66 return strndup (s, SIZE_MAX - 5); /* { dg-warning ".strndup. specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+ \\\[-Wstringop-overread" } */
67 }
68
69 size_t test_strnlen (void)
70 {
71 return strnlen (s, SIZE_MAX - 6); /* { dg-warning ".strnlen. specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+ \\\[-Wstringop-overread" } */
72 }