modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/20050125-1.c (about)

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