------- Comment #12 from jakub at gcc dot gnu dot org 2009-01-27 11:29 ------- The difference is in interpret_integer: 579 if (itk == itk_none) 580 /* cpplib has already issued a warning for overflow. */ 581 type = ((flags & CPP_N_UNSIGNED) 582 ? widest_unsigned_literal_type_node 583 : widest_integer_literal_type_node); 584 else 585 type = integer_types[itk]; in both cases the overflow warning has been issued, but widest_integer_literal_type_node differs between 32-bit HWI and 64-bit HWI - in the former case it is signed DImode, in the latter case signed TImode. Negating TImode 0x8000000000000000 doesn't overflow, but negating DImode 0x8000000000000000 does and thus the warning in 32-bit HWI case.
-- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38934