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 (); }