blob: 844660ff0152b47a095fb4ab8d59ccb169e276ac [file] [log] [blame]
/* PR c/71924 - missing -Wreturn-local-addr returning alloca result
{ dg-do compile }
{ dg-options "-O2 -Wall" }
{ dg-require-effective-target alloca } */
typedef __SIZE_TYPE__ size_t;
void* memcpy (void*, const void*, size_t);
void* mempcpy (void*, const void*, size_t);
void* memmove (void*, const void*, size_t);
char* stpcpy (char*, const char*);
char* stpncpy (char*, const char*, size_t);
size_t strlen (const char*);
size_t strnlen (const char*, size_t);
char* strcat (char*, const char*);
char* strncat (char*, const char*, size_t);
char* strcpy (char*, const char*);
char* strncpy (char*, const char*, size_t);
char* strdup (const char*);
char* strchr (const char*, int);
char* strrchr (const char*, int);
char* strstr (const char*, const char*);
void sink (void*, ...);
void* return_memcpy (const void *s, unsigned n)
{
char a[n]; /* { dg-message "declared here" } */
void *p = memcpy (a, s, n);
sink (p);
return p; /* { dg-warning "\\\[-Wreturn-local-addr]" } */
}
void* return_memcpy_cst (const void *s, unsigned n)
{
char a[n]; /* { dg-message "declared here" } */
void *p = memcpy (a + 1, s, n);
sink (p);
return p; /* { dg-warning "\\\[-Wreturn-local-addr]" } */
}
void* return_memcpy_var (const void *s, unsigned n, int i)
{
char a[n]; /* { dg-message "declared here" } */
void *p = memcpy (a + i, s, n);
sink (p);
return p; /* { dg-warning "\\\[-Wreturn-local-addr]" } */
}
void* return_mempcpy (const void *s, unsigned n)
{
char a[n]; /* { dg-message "declared here" } */
void *p = mempcpy (a, s, n);
sink (p);
return p; /* { dg-warning "\\\[-Wreturn-local-addr]" } */
}
void* return_memmove_cst (unsigned n)
{
char a[n]; /* { dg-message "declared here" } */
sink (a);
void *p = memmove (a + 1, a, n);
sink (p);
return p; /* { dg-warning "\\\[-Wreturn-local-addr]" } */
}
void* return_memmove_var (unsigned n, int i)
{
char a[n]; /* { dg-message "declared here" } */
sink (a);
void *p = memmove (a + i, a, n);
sink (p);
return p; /* { dg-warning "\\\[-Wreturn-local-addr]" } */
}
char* return_stpcpy (unsigned n, const char *s)
{
char a[n]; /* { dg-message "declared here" } */
char *p = stpcpy (a, s);
sink (p);
return p; /* { dg-warning "\\\[-Wreturn-local-addr]" } */
}
char* return_stpncpy (unsigned n, const char *s)
{
char a[n]; /* { dg-message "declared here" } */
char *p = stpncpy (a, s, n);
sink (p);
return p; /* { dg-warning "\\\[-Wreturn-local-addr]" } */
}
char* return_strcat (unsigned n, const char *s)
{
char a[n]; /* { dg-message "declared here" } */
sink (a);
char *p = strcat (a, s);
sink (p);
return p; /* { dg-warning "\\\[-Wreturn-local-addr]" } */
}
char* return_strncat (unsigned n, const char *s)
{
char a[n]; /* { dg-message "declared here" } */
sink (a);
char *p = strncat (a, s, n);
sink (p);
return p; /* { dg-warning "\\\[-Wreturn-local-addr]" } */
}
char* return_strcpy (unsigned n, const char *s)
{
char a[n]; /* { dg-message "declared here" } */
char *p = strcpy (a, s);
sink (p);
return p; /* { dg-warning "\\\[-Wreturn-local-addr]" } */
}
char* return_strcpy_plus_strlen (unsigned n, const char *s)
{
char a[n]; /* { dg-message "declared here" } */
char *p = strcpy (a, s);
sink (p);
p += strlen (p);
return p; /* { dg-warning "\\\[-Wreturn-local-addr]" } */
}
char* return_strcpy_cst_plus_strlen (unsigned n, const char *s)
{
char a[n]; /* { dg-message "declared here" } */
sink (a);
char *p = strcpy (a + 1, s);
sink (p);
p += strlen (p);
return p; /* { dg-warning "\\\[-Wreturn-local-addr]" } */
}
char* return_strcpy_var_plus_strlen (unsigned n, const char *s, int i)
{
char a[n]; /* { dg-message "declared here" } */
sink (a);
char *p = strcpy (a + i, s);
sink (p);
p += strlen (p);
return p; /* { dg-warning "\\\[-Wreturn-local-addr]" } */
}
char* return_strncpy (unsigned n, const char *s)
{
char a[n]; /* { dg-message "declared here" } */
char *p = strncpy (a, s, n);
sink (p);
return p; /* { dg-warning "\\\[-Wreturn-local-addr]" } */
}
char* return_strncpy_plus_strnlen (unsigned n, const char *s)
{
char a[n]; /* { dg-message "declared here" } */
char *p = strncpy (a, s, n);
p += strnlen (p, n);
sink (p);
return p; /* { dg-warning "\\\[-Wreturn-local-addr]" } */
}
char* return_strdup (unsigned n)
{
char a[n];
sink (a);
char *p = strdup (a);
return p;
}
char* return_strchr (unsigned n, int c)
{
char a[n]; /* { dg-message "declared here" } */
sink (a);
char *p = strchr (a, c);
return p; /* { dg-warning "\\\[-Wreturn-local-addr]" } */
}
char* return_strstr (unsigned n, const char *s)
{
char a[n]; /* { dg-message "declared here" } */
sink (a);
char *p = strstr (a, s);
if (p)
p += strlen (p);
return p; /* { dg-warning "\\\[-Wreturn-local-addr]" } */
}
char* return_strrchr (unsigned n, int c)
{
char a[n]; /* { dg-message "declared here" } */
sink (a);
char *p = strrchr (a, c);
return p; /* { dg-warning "\\\[-Wreturn-local-addr]" } */
}