20040326-2.c
来自「用于进行gcc测试」· C语言 代码 · 共 65 行
C
65 行
/* { dg-options "-O2 -fno-inline-functions" } *//* { dg-do run } *//* Gimplification problem exposed by zsh. All the side-effects in function arguments and in the called expression should happen before the actual function call. */extern void abort (void);int A;typedef void (*fnptr) (void);fnptr *F;voidfoo (int x){ if (A == x) abort ();}voidbar (int x, int y){ if (x == 5 || y != 3) abort ();}voidboz (void){ abort ();}voidbaz (void){ if (*F != boz) abort ();}fnptr B[2] = { baz, boz };main (){ int b, c; /* The gimplifier was emitting A++ after the call to foo. */ A = 5; foo (A++); /* The increment to 'b' and 'c' must happen before the call. However, the first argument to bar() must be the original value of 'b', while the second argument must be the new value of 'c'. */ b = 4; c = 2; bar (b++, ++c); /* This call via function pointer *F should go to baz, but F should be incremented before the actual call (i.e., right before the call F should be pointing to boz). */ F = &B[0]; (*F++) (); return 0;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?