📄 pr19633.c
字号:
/* { dg-do link } *//* { dg-options "-O2" } */struct S{ int w, x, y, z;};struct T{ int r; struct S s;};voidfoo (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;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -