73 lines
2.4 KiB
C
73 lines
2.4 KiB
C
/* PR middle-end/88771 - Misleading -Werror=array-bounds error
|
|
Verify that the warning issued for calls to "bounded" string
|
|
functions is -Wstringop-overflow with the right wording.
|
|
{ dg-do compile }
|
|
{ dg-options "-O2 -Wall" } */
|
|
|
|
#define PTRDIFF_MAX __PTRDIFF_MAX__
|
|
#define SIZE_MAX __SIZE_MAX__
|
|
|
|
typedef __SIZE_TYPE__ size_t;
|
|
|
|
extern void* memcpy (void*, const void*, size_t);
|
|
extern void* memmove (void*, const void*, size_t);
|
|
extern void* memset (void*, int, size_t);
|
|
|
|
extern char* stpncpy (char*, const char*, size_t);
|
|
|
|
extern char* strncat (char*, const char*, size_t);
|
|
extern char* strncpy (char*, const char*, size_t);
|
|
|
|
extern char* strndup (const char*, size_t);
|
|
|
|
extern int strncmp (const char*, const char*, size_t);
|
|
extern int strncasecmp (const char*, const char*, size_t);
|
|
|
|
extern size_t strnlen (const char*, size_t);
|
|
|
|
extern char *d;
|
|
extern const char *s;
|
|
|
|
|
|
void test_memcpy (void)
|
|
{
|
|
memcpy (d, s, SIZE_MAX); /* { dg-warning ".memcpy. specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+ \\\[-Wstringop-overflow=\\\]" } */
|
|
}
|
|
|
|
void test_memmove (void)
|
|
{
|
|
memmove (d, s, SIZE_MAX - 1); /* { dg-warning ".memmove. specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+ \\\[-Wstringop-overflow=\\\]" } */
|
|
}
|
|
|
|
void test_memset (void)
|
|
{
|
|
memset (d, 0, SIZE_MAX - 2); /* { dg-warning ".memset. specified \(bound|size\) \[0-9\]+ exceeds maximum object size \[0-9\]+ \\\[-Wstringop-overflow=\\\]" } */
|
|
}
|
|
|
|
|
|
char* test_stpncpy (void)
|
|
{
|
|
return stpncpy (d, s, SIZE_MAX - 4); /* { dg-warning ".stpncpy. specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+ \\\[-Wstringop-overflow=\\\]" } */
|
|
}
|
|
|
|
|
|
void test_strncat (void)
|
|
{
|
|
strncat (d, s, SIZE_MAX - 3); /* { dg-warning ".strncat. specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+ \\\[-Wstringop-overflow=\\\]" } */
|
|
}
|
|
|
|
void test_strncpy (void)
|
|
{
|
|
strncpy (d, s, SIZE_MAX - 4); /* { dg-warning ".strncpy. specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+ \\\[-Wstringop-overflow=\\\]" } */
|
|
}
|
|
|
|
char* test_strndup (void)
|
|
{
|
|
return strndup (s, SIZE_MAX - 5); /* { dg-warning ".strndup. specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+ \\\[-Wstringop-overread" } */
|
|
}
|
|
|
|
size_t test_strnlen (void)
|
|
{
|
|
return strnlen (s, SIZE_MAX - 6); /* { dg-warning ".strnlen. specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+ \\\[-Wstringop-overread" } */
|
|
}
|