1 /* Verify that the CALL sideeffect isn't optimized away.  */
2 /* Contributed by Greg Parker  25 Jan 2005  <gparker@apple.com> */
3 
4 #include <stdlib.h>
5 #include <stdio.h>
6 
7 struct parse {
8   char *next;
9   char *end;
10   int error;
11 };
12 
seterr(struct parse * p,int err)13 int seterr(struct parse *p, int err)
14 {
15   p->error = err;
16   return 0;
17 }
18 
bracket_empty(struct parse * p)19 void bracket_empty(struct parse *p)
20 {
21   if (((p->next < p->end) && (*p->next++) == ']')  ||  seterr(p, 7)) { }
22 }
23 
main(int argc,char ** argv)24 int main(int argc __attribute__((unused)), char **argv __attribute__((unused)))
25 {
26   struct parse p;
27   p.next = p.end = (char *)0x12345;
28 
29   p.error = 0;
30   bracket_empty(&p);
31   if (p.error != 7)
32     abort ();
33 
34   return 0;
35 }
36