(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
pr103120.c
       1  // { dg-do run }
       2  // { dg-options "-O2" }
       3  
       4  #define radix 10
       5  __INT32_TYPE__ numDigits(__UINT64_TYPE__ value)
       6  {
       7       __INT32_TYPE__ n = 1;
       8       while (value > __UINT32_MAX__)
       9       {
      10          n += 4;
      11          value /= radix * radix * radix * radix;
      12       }
      13       __UINT32_TYPE__ v = (__UINT32_TYPE__)value;
      14       while (1)
      15       {
      16           if (v < radix)
      17               return n;
      18           if (v < radix * radix)
      19               return n + 1;
      20           if (v < radix * radix * radix)
      21               return n + 2;
      22           if (v < radix * radix * radix * radix)
      23               return n + 3;
      24           n += 4;
      25           v /= radix * radix * radix * radix;
      26       }
      27  }
      28  
      29  int main()
      30  {
      31      if (numDigits(__UINT64_MAX__) != 20)
      32          __builtin_abort();
      33  }