------- Comment #6 from rguenth at gcc dot gnu dot org 2009-10-05 12:02 ------- Actually the testcase is invalid.
uint32 res = ((uint16)(cpu->gprs[12] >> 16) * (uint16)(cpu->gprs[16] >> 16)); performs a signed multiplication which invokes undefined behavior if it overflows. Thus the compiler rightfully can assume that the result can be converted to a positive signed value. -- rguenth at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |INVALID http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41577