| /* { dg-do compile } */ |
| /* { dg-options "-O2" } */ |
| /* { dg-add-options bind_pic_locally } */ |
| |
| typedef struct A { int a,b; } A; |
| int*g(int*x){return x;} |
| int*f1(){ |
| A x[2]={{1,2},{3,4}}; |
| return g(&x[1].a); // { dg-warning "returns address of local variable" } |
| } |
| int*f2(int n){ |
| A x[2]={{1,2},{3,4}}; |
| return n?0:g(&x[1].a); // { dg-warning "may return address of local variable" } |
| } |
| A y[2]={{1,2},{3,4}}; |
| int*h(){ |
| return g(&y[1].a); |
| } |
| int*j(int n){ |
| A x[2]={{1,2},{3,4}}; |
| int*p=g(&y[1].a); |
| if(n==1)p=g(&x[1].a); |
| if(n==2)p=g(&x[0].b); |
| return p; // { dg-warning "may return address of local variable" } |
| } |
| int*s() |
| { |
| static int i; |
| return &i; |
| } |