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[2];
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