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

     1  /* PR tree-optimization/80153 */
     2  
     3  void check (int, int, int) __attribute__((noinline));
     4  void check (int c, int c2, int val)
     5  {
     6    if (!val) {
     7      __builtin_abort();
     8    }
     9  }
    10  
    11  static const char *buf;
    12  static int l, i;
    13  
    14  void _fputs(const char *str)  __attribute__((noinline));
    15  void _fputs(const char *str)
    16  {
    17    buf = str;
    18    i = 0;
    19    l = __builtin_strlen(buf);
    20  }
    21  
    22  char _fgetc() __attribute__((noinline));
    23  char _fgetc()
    24  {
    25    char val = buf[i];
    26    i++;
    27    if (i > l)
    28      return -1;
    29    else
    30      return val;
    31  }
    32  
    33  static const char *string = "oops!\n";
    34  
    35  int main(void)
    36  {
    37    int i;
    38    int c;
    39  
    40    _fputs(string);
    41  
    42    for (i = 0; i < __builtin_strlen(string); i++) {
    43      c = _fgetc();
    44      check(c, string[i], c == string[i]);
    45    }
    46  
    47    return 0;
    48  }