| /* { dg-do compile } */ |
| /* { dg-options "-O2 -fdump-tree-optimized" } */ |
| |
| struct param { int *a; }; |
| void foo(struct param *p); |
| int bar(void) |
| { |
| int a[2]; |
| struct param p; |
| a[0] = 1; |
| a[1] = 1; |
| p.a = &a[0]; |
| foo(&p); |
| return a[0] + *p.a; |
| } |
| |
| /* We need to have both: a load from "a[0]" and a load from "*p.a", |
| the latter is an ssa temporary. */ |
| /* { dg-final { scan-tree-dump "= a.0.;" "optimized" } } */ |
| /* { dg-final { scan-tree-dump "= \\*\[^\r\n\]*_.;" "optimized" } } */ |
| /* { dg-final { cleanup-tree-dump "optimized" } } */ |