------- Comment #36 from rguenth at gcc dot gnu dot org 2008-02-10 22:36 ------- Actually the wrong types are caused by loop IM which replaces the bittest
D.1210_17 = D.1208_13 >> 63; D.1211_2 = (int) D.1210_17; if (D.1211_1 != 0) by shifttmp.48_12 = 0x8000000000000000; shifttmp.48_16 = shifttmp.48_12 & D.1208_13; if (shifttmp.48_16 != 0) but forgets to update the type of the zero. Testing the patch. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33992