modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/pr20100-1.c (about) 1 /* PR tree-optimization/20100 2 Pure function being treated as const. 3 Author: Hans-Peter Nilsson. */ 4 5 static unsigned short g = 0; 6 static unsigned short p = 0; 7 unsigned char e; 8 9 static unsigned short 10 next_g (void) 11 { 12 return g == e - 1 ? 0 : g + 1; 13 } 14 15 static unsigned short 16 curr_p (void) 17 { 18 return p; 19 } 20 21 static unsigned short 22 inc_g (void) 23 { 24 return g = next_g (); 25 } 26 27 static unsigned short 28 curr_g (void) 29 { 30 return g; 31 } 32 33 static char 34 ring_empty (void) 35 { 36 if (curr_p () == curr_g ()) 37 return 1; 38 else 39 return 0; 40 } 41 42 char 43 frob (unsigned short a, unsigned short b) 44 { 45 g = a; 46 p = b; 47 inc_g (); 48 return ring_empty (); 49 } 50 51 unsigned short 52 get_n (void) 53 { 54 unsigned short n = 0; 55 unsigned short org_g; 56 org_g = curr_g (); 57 while (!ring_empty () && n < 5) 58 { 59 inc_g (); 60 n++; 61 } 62 63 return n; 64 } 65 66 void abort (void); 67 void exit (int); 68 int main (void) 69 { 70 e = 3; 71 if (frob (0, 2) != 0 || g != 1 || p != 2 || e != 3 72 || get_n () != 1 73 || g != 2 || p != 2) 74 abort (); 75 exit (0); 76 }