http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55142
--- Comment #29 from Eric Botcazou <ebotcazou at gcc dot gnu.org> 2012-11-08 23:21:44 UTC --- > So for POINTERS_EXTEND_UNSIGNED > 0, we should transform > > (zero_extend:DI (plus:SI (FOO:SI) (const_int Y))) > > in such a way that it won't cause ICE and zero-extend the > result. For X32, we just need to generate > > (plus:SI (REG:SI) (const_int Y)) The ICE is a minor detail, the real issue is convert_memory_address_addr_space and PR middle-end/49721. The unmodified compiler generates the same problematic instructions for the full testcase without -fPIC. It's clear that Richard's change, aka the un-sign-extension of sizetype constants, is an earthquake here.