/* { dg-do run } */ /* { dg-options "-O --param max-aliased-vops=1" } */ /* Compile with -O --param max-aliased-vops=1. This partitions all the initial SFTs for 'm' which was causing the operand scanner to miss adding the right SFTs to p->b[2]. */ extern void abort (void); struct X { int a; struct Y { int b[4]; } b; struct Y c; } m; struct X n; foo (int i) { struct Y *p = (i > 10) ? &m.b : &n.c; p->b[2] = 10; m.b.b[3] = 6; n.c.b[2] = 3; return p->b[2] + n.c.b[2] + m.b.b[3]; } main() { if (foo (3) != 12) abort (); return 0; }