http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50182
--- Comment #3 from davidxl <xinliangli at gmail dot com> 2011-08-25 00:13:00 UTC --- Caused by differences in FE generated code: 46: D.6887 = (int) D.6886; D.6888 = custom_constant_add<signed char>::do_shift (D.6887); D.6889 = (unsigned char) D.6888; result.8 = (unsigned char) result; D.6891 = D.6889 + result.8; result = (signed char) D.6891; n = n + 1; trunk: D.6938 = (int) D.6937; D.6874 = custom_constant_add<signed char>::do_shift (D.6938); D.6939 = (int) result; <-- promoted to int D.6940 = (int) D.6874; <---promoted to int D.6941 = D.6939 + D.6940; result = (signed char) D.6941; n = n + 1;