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 next_g(void)10next_g (void) 11 { 12 return g == e - 1 ? 0 : g + 1; 13 } 14 15 static unsigned short curr_p(void)16curr_p (void) 17 { 18 return p; 19 } 20 21 static unsigned short inc_g(void)22inc_g (void) 23 { 24 return g = next_g (); 25 } 26 27 static unsigned short curr_g(void)28curr_g (void) 29 { 30 return g; 31 } 32 33 static char ring_empty(void)34ring_empty (void) 35 { 36 if (curr_p () == curr_g ()) 37 return 1; 38 else 39 return 0; 40 } 41 42 char frob(unsigned short a,unsigned short b)43frob (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 get_n(void)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 66 void abort (void); 67 void exit (int); main(void)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