Small ChangeLog tweak.
[official-gcc.git] / gcc / testsuite / gcc.c-torture / execute / pr20100-1.c
blob8782edcd845709ba7236a35a99a58129a0de562f
1 /* PR tree-optimization/20100
2 Pure function being treated as const.
3 Author: Hans-Peter Nilsson. */
5 static unsigned short g = 0;
6 static unsigned short p = 0;
7 unsigned char e;
9 static unsigned short
10 next_g (void)
12 return g == e - 1 ? 0 : g + 1;
15 static unsigned short
16 curr_p (void)
18 return p;
21 static unsigned short
22 inc_g (void)
24 return g = next_g ();
27 static unsigned short
28 curr_g (void)
30 return g;
33 static char
34 ring_empty (void)
36 if (curr_p () == curr_g ())
37 return 1;
38 else
39 return 0;
42 char
43 frob (unsigned short a, unsigned short b)
45 g = a;
46 p = b;
47 inc_g ();
48 return ring_empty ();
51 unsigned short
52 get_n (void)
54 unsigned short n = 0;
55 unsigned short org_g;
56 org_g = curr_g ();
57 while (!ring_empty () && n < 5)
59 inc_g ();
60 n++;
63 return n;
66 void abort (void);
67 void exit (int);
68 int main (void)
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);