http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56956
--- Comment #6 from Dan Gohman <sunfish at google dot com> 2013-04-15 05:14:27 UTC --- (In reply to comment #3) > Pulling the unary minus out into a separate statement, like this: > > uint64_t y = -x; > return x <= INT64_MAX ? x : -y; > > causes the program to execute correctly. Actually, I meant to write this: uint64_t y = -x; return x <= INT64_MAX ? x : y; and it still executes correctly, with no trap.