http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51527
--- Comment #2 from Georg-Johann Lay <gjl at gcc dot gnu.org> 2012-03-05 17:31:49 UTC --- Here is a smaller test case: __int24 add3 (__int24 a) { return a + 0x10000; } It works if -- the constant is cast with (__int24) 0x10000 -- the constant is smaller than 0x10000 -- the operation is not +, - or *