/* PR tree-optimization/20100 Pure function being treated as const. Author: Hans-Peter Nilsson. */ static unsigned short g = 0; static unsigned short p = 0; unsigned char e; static unsigned short next_g (void) { return g == e - 1 ? 0 : g + 1; } static unsigned short curr_p (void) { return p; } static unsigned short inc_g (void) { return g = next_g (); } static unsigned short curr_g (void) { return g; } static char ring_empty (void) { if (curr_p () == curr_g ()) return 1; else return 0; } char frob (unsigned short a, unsigned short b) { g = a; p = b; inc_g (); return ring_empty (); } unsigned short get_n (void) { unsigned short n = 0; unsigned short org_g; org_g = curr_g (); while (!ring_empty () && n < 5) { inc_g (); n++; } return n; } void abort (void); void exit (int); int main (void) { e = 3; if (frob (0, 2) != 0 || g != 1 || p != 2 || e != 3 || get_n () != 1 || g != 2 || p != 2) abort (); exit (0); }