blob: bdf1cd40c1b61a447444455096b2fbb7964ac3b7 [file] [log] [blame]
/* PR c/71924 - missing -Wreturn-local-addr returning alloca result
{ dg-do compile }
{ dg-options "-O2 -Wall" } */
void sink (void*);
void* loop_idx (int x)
{
char a[32]; /* { dg-message "declared here" } */
char *p = a;
sink (a);
int i;
for (i = 0; i != 32; ++i)
if (p[i] == x)
break;
p = i < 32 ? &p[i] : 0;
return p; /* { dg-warning "may return address of local variable" } */
}
void* loop_ptr (int i, int x)
{
char a[32]; /* { dg-message "declared here" } */
char *p;
sink (a);
/* The warning for the statement below would ideally be a "returns"
because it definitely returns the address of a, but when both
returns get merged into one we end up with a "may return". */
for (p = a; *p; ++p)
if (*p == x)
return p; /* { dg-warning "(returns|may return) address of local variable" "missing location" { xfail *-*-* } } */
/* { dg-warning "(returns|may return) address of local variable" "pr90735" { target *-*-* } 0 } */
return 0;
}