http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46337
--- Comment #3 from Peter A. Bigot <bigotp at acm dot org> 2010-11-07 14:09:31 UTC --- Created attachment 22308 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=22308 Test case This test case evokes the bug with the 16-bit msp430 target, which is not integrated into gcc mainline. When built with -O2, the copy from cal into tcal is converted into a series of five one-word moves. The copies for the values at word offsets 2 (first half temperature_scale) and 4 (local_modbus_addr) are apparently eliminated by some other optimization, but the copy for the last half of temperature_scale hits the dse.c code. In my case, I end up attempting to convert the value 5 to CCMode, instead of the value 2 to HIMode, resulting in an ICE in trunc_int_for_mode at explow.c:56. I wasn't able to reproduce the ICE on a different architecture, and haven't tried to check the generated code. Seems that it's pretty dependent on the back end. Hope this helps, and if not, that it's still ok to fix because it's clearly wrong.