1  /* PR rtl-optimization/46315 */
       2  /* Reported by Magnus Granberg <zorry@gentoo.org> */
       3  
       4  /* { dg-do run } */
       5  /* { dg-options "-O2 -fno-strict-overflow" } */
       6  
       7  extern void abort (void);
       8  
       9  static char const *
      10  parse_ranged (char const *s, int digits)
      11  {
      12    int n = 0;
      13    char const *lim = s + digits;
      14    while (s < lim)
      15      {
      16        unsigned d = *s++ - '0';
      17        if (9 < d)
      18          return 0;
      19        n = 10 * n + d;
      20      }
      21    return s && 0 <= n && n <= 59 ? s : 0;
      22  }
      23  
      24  int main(void)
      25  {
      26    const char *s = "10092240";
      27  
      28    s = parse_ranged (s, 2);
      29    s = parse_ranged (s, 2);
      30    s = parse_ranged (s, 2);
      31    s = parse_ranged (s, 2);
      32  
      33    if (!s || *s != '\0')
      34      abort();
      35  
      36    return 0;
      37  }