1 /* { dg-do compile } */
2 /* { dg-options "-O2 -fdump-tree-cddce1" } */
3 
4 struct S { unsigned f; };
5 
6 int
foo(struct S * p)7 foo ( struct S *p)
8 {
9   int *q = (int *)&p->f;
10   int i = *q;
11   return i + p->f;
12 }
13 
14 
15 /* There should only be one load of p->f because FRE removes the redundancy
16    by realizing it can cast the result of either to the other.  */
17 /* { dg-final { scan-tree-dump-times "= \[^\n\]*p_.\\\(D\\\)" 1 "cddce1" } } */
18 
19