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)13int seterr(struct parse *p, int err) 14 { 15 p->error = err; 16 return 0; 17 } 18 bracket_empty(struct parse * p)19void bracket_empty(struct parse *p) 20 { 21 if (((p->next < p->end) && (*p->next++) == ']') || seterr(p, 7)) { } 22 } 23 main(int argc,char ** argv)24int 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