I can confirm that it never finishes on i586.
I would recommend to replace   DEBUG_ASSERT (num >= 0);
which expands to:
  ((num >= 0) ? (void) 0 : __builtin_unreachable ());

into:

  if (num < 0)
    __builtin_abort ();

From GCC documentation:

If control flow reaches the point of the __builtin_unreachable,
the program is undefined.

In this case it loops forever.

Martin



Reply via email to