https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97939
--- Comment #5 from Dennis Clarke <dclarke at blastwave dot org> --- Not sure how useful this is but all of the following toss the same ICE : long f(long arg){return arg + 4096;} long f(long arg){return arg - 4096;} long f(long arg){return 4096 + arg;} long f(long arg){return arg - 4096;} However these work fine : long f(long arg){return 4096 - arg;} long f(long arg){return arg * 4096;} long f(long arg){return 4096 * arg;} long f(long arg){return arg / 4096;} etc etc etc as well as other powers of 2. very strange.