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

     1  /* PR rtl-optimization/21330 */
     2  
     3  extern void abort (void);
     4  extern int strcmp (const char *, const char *);
     5  
     6  int
     7  __attribute__((noinline))
     8  bar (const char **x)
     9  {
    10    return *(*x)++;
    11  }
    12  
    13  int
    14  __attribute__((noinline))
    15  baz (int c)
    16  {
    17    return c != '@';
    18  }
    19  
    20  void
    21  __attribute__((noinline))
    22  foo (const char **w, char *x, _Bool y, _Bool z)
    23  {
    24    char c = bar (w);
    25    int i = 0;
    26  
    27    while (1)
    28      {
    29        x[i++] = c;
    30        c = bar (w);
    31        if (y && c == '\'')
    32          break;
    33        if (z && c == '\"')
    34          break;
    35        if (!y && !z && !baz (c))
    36          break;
    37      }
    38     x[i] = 0;
    39  }
    40  
    41  int
    42  main (void)
    43  {
    44    char buf[64];
    45    const char *p;
    46    p = "abcde'fgh";
    47    foo (&p, buf, 1, 0);
    48    if (strcmp (p, "fgh") != 0 || strcmp (buf, "abcde") != 0)
    49      abort ();
    50    p = "ABCDEFG\"HI";
    51    foo (&p, buf, 0, 1);
    52    if (strcmp (p, "HI") != 0 || strcmp (buf, "ABCDEFG") != 0)
    53      abort ();
    54    p = "abcd\"e'fgh";
    55    foo (&p, buf, 1, 1);
    56    if (strcmp (p, "e'fgh") != 0 || strcmp (buf, "abcd") != 0)
    57      abort ();
    58    p = "ABCDEF'G\"HI";
    59    foo (&p, buf, 1, 1);
    60    if (strcmp (p, "G\"HI") != 0 || strcmp (buf, "ABCDEF") != 0)
    61      abort ();
    62    p = "abcdef@gh";
    63    foo (&p, buf, 0, 0);
    64    if (strcmp (p, "gh") != 0 || strcmp (buf, "abcdef") != 0)
    65      abort ();
    66    return 0;
    67  }