Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/gcc.dg/pr19633.c @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 (2017-10-27) |
parents | |
children |
line wrap: on
line source
/* { dg-do link } */ /* { dg-options "-O2" } */ struct S { int w, x, y, z; }; struct T { int r; struct S s; }; void link_error (void); int bar (struct S, int); 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; }