https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64255

--- Comment #6 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
A better version:

void __attribute__ ((noinline, noclone))
bar (long int i)
{
  asm ("");
}

int __attribute__ ((noinline, noclone))
f (long i)
{
  if (i == 0)
    return 0;
  else
    {
      unsigned long ai = i >= 0 ? (unsigned long) i : -(unsigned long) i;
      if ((i >= 0 ? (unsigned long) i : -(unsigned long) i) != ai)
        bar (0);
      bar (i);
      return ai;
    }
}

int
main (void)
{
  if (f (1) != 1)
    __builtin_abort ();
}

Reply via email to