/* { dg-do run } */ /* { dg-options "-O2" } */ struct A { int x; int y; }; baz (struct A *a) { a->x = 3; a->y = 2; } foo (int i) { struct A a; /* Make sure we can't scalarize 'a'. */ baz (&a); if (i > 10) a.x = i; else a.x = i; /* Copy propagation should prove that this predicate is always false. */ if (a.x != i) link_error (); return a.x; } main () { foo (30); return 0; }