1/* PR tree-optimization/20100 2 Pure function being treated as const. 3 Author: Hans-Peter Nilsson. */ 4 5static unsigned short g = 0; 6static unsigned short p = 0; 7unsigned char e; 8 9static unsigned short 10next_g (void) 11{ 12 return g == e - 1 ? 0 : g + 1; 13} 14 15static unsigned short 16curr_p (void) 17{ 18 return p; 19} 20 21static unsigned short 22inc_g (void) 23{ 24 return g = next_g (); 25} 26 27static unsigned short 28curr_g (void) 29{ 30 return g; 31} 32 33static char 34ring_empty (void) 35{ 36 if (curr_p () == curr_g ()) 37 return 1; 38 else 39 return 0; 40} 41 42char 43frob (unsigned short a, unsigned short b) 44{ 45 g = a; 46 p = b; 47 inc_g (); 48 return ring_empty (); 49} 50 51unsigned short 52get_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 66void abort (void); 67void exit (int); 68int 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} 77