modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/compile/pr16808.c (about) 1 /* We used to ICE as we did not mark a Vop for rename as 2 we changed a function call to a normal modify statement 3 while folding exp(0.0); */ 4 5 double exp(double); 6 void f0(void); 7 void f(double); 8 typedef struct Parser { 9 int x; 10 char *s; 11 } Parser; 12 static double pop(Parser *p) { 13 if (p->s[0] <= 0) { 14 f0(); 15 return 0; 16 } 17 --p->x; 18 return 0; 19 } 20 static void evalFactor(Parser *p) { 21 while (p->x) 22 f(exp(pop(p))); 23 } 24 static void evalTerm(Parser *p) { 25 while (p->s[0]) 26 evalFactor(p); 27 } 28 static void evalExpression(Parser *p) { 29 evalTerm(p); 30 while (p->s[0]) 31 evalTerm(p); 32 } 33 void evalPrimary(Parser *p) { 34 if (p->s) 35 return; 36 evalExpression(p); 37 } 38