| /* { dg-do compile } */ |
| /* { dg-options "-O2 -fdump-ipa-sra-details" } */ |
| |
| volatile void *gp; |
| volatile void *gq; |
| char buf[16]; |
| |
| __attribute__((returns_nonnull, noinline)) |
| static char * |
| foo (char *p, char *q) |
| { |
| gq = q; |
| gp = p; |
| return q; |
| } |
| |
| __attribute__((returns_nonnull, noinline)) |
| static char * |
| bar (char *p, char *q) |
| { |
| return foo (p, q) + 8; |
| } |
| |
| __attribute__((noipa)) |
| static char * |
| get_charp (void) |
| { |
| return &buf[0]; |
| } |
| |
| int |
| main () |
| { |
| char *r; |
| asm volatile ("" : : : "memory"); |
| r = bar (get_charp (), get_charp ()); |
| return 0; |
| } |
| |
| /* { dg-final { scan-ipa-dump-times "Will SKIP return." 2 "sra" } } */ |