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