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()14int 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