URL
https://opencores.org/ocsvn/scarts/scarts/trunk
Subversion Repositories scarts
[/] [scarts/] [trunk/] [toolchain/] [scarts-gcc/] [gcc-4.1.1/] [gcc/] [testsuite/] [gcc.dg/] [pr19633.c] - Rev 12
Compare with Previous | Blame | View Log
/* { dg-do link } */ /* { dg-options "-O2" } */ struct S { int w, x, y, z; }; struct T { int r; struct S s; }; void foo (int a, struct T b) { struct S *c = 0; if (a) c = &b.s; b.s.w = 3; /* Since 'c' may be pointing to NULL here, we used to flag it as pointing anywhere, which was forcing the aliaser to mark as call-clobbered every other variable pointed-to by 'c' ('b' in this case). This, in turn, caused the insertion of V_MAY_DEFs for 'b' at this call-site, which prevented constant propagation from 'b.s.w = 3' to 'if (b.s.w != 3)'. */ bar (*c, a); if (b.s.w != 3) link_error (); } int main () { struct T b; foo (3, b); return 0; } int X; int bar (struct S x, int i) { X = 3; }