1/* { dg-do compile } */ 2/* { dg-options "-O2 -fdump-tree-optimized" } */ 3 4struct param { int *a; }; 5void foo(struct param *p); 6int bar(void) 7{ 8 int a[32]; 9 struct param p; 10 a[0] = 1; 11 a[1] = 1; 12 p.a = &a[0]; 13 foo(&p); 14 return a[0] + *p.a; 15} 16 17/* We need to have both: a load from "a[0]" and a load from "*p.a", 18 the latter can be an ssa temporary. */ 19/* { dg-final { scan-tree-dump "= a.0.;" "optimized" } } */ 20/* { dg-final { scan-tree-dump "= \\*\[pD\]" "optimized" } } */ 21/* { dg-final { cleanup-tree-dump "optimized" } } */ 22