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  }