1 /* { dg-do run } */
2 /* { dg-options "-O2" } */
3 
4 extern void abort (void);
5 struct S {
6     int *i[4];
7     int *p1;
8     int *p2;
9     int *p3;
10     int *p4;
11     int **x;
12 };
13 int **b;
main()14 int main()
15 {
16   int i = 1;
17   struct S s;
18   s.p3 = &i;
19   int **p;
20   if (b)
21     p = b;
22   else
23     p = &s.i[2];
24   p += 4;
25   /* prevert fowrprop from creating an offsetted sd constraint and
26      preserve the pointer offsetting constraint.  */
27   s.x = p;
28   p = s.x;
29   if (!b)
30     {
31       int *z = *p;
32       /* z should point to i (and non-local/escaped).  */
33       *z = 0;
34     }
35   if (i != 0)
36     abort ();
37   return i;
38 }
39