http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54471
--- Comment #9 from Marc Glisse <glisse at gcc dot gnu.org> 2012-11-21 17:18:47 UTC --- Jakub, your patch makes sense to me (or min0.is_zero() and min1.is_zero()). I am ashamed I managed to get products with [0,n] (with n larger than MAX/2) wrong. Good thing Kenneth Zadeck's wide_int will soon allow us to remove most of this horrible code. Another test that shows the error (optimizes away the call to g): void g(); void h(); void f(unsigned __int128 x){ if(x>(unsigned __int128)(-3))return; unsigned __int128 y=2*x; if(y==42) g(); else h(); }