http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49235
--- Comment #6 from Richard Guenther <rguenth at gcc dot gnu.org> 2011-05-31 09:44:55 UTC --- Index: gcc/tree-ssa-address.c =================================================================== --- gcc/tree-ssa-address.c (revision 174469) +++ gcc/tree-ssa-address.c (working copy) @@ -365,7 +365,7 @@ create_mem_ref_raw (tree type, tree alia ??? As IVOPTs does not follow restrictions to where the base pointer may point to create a MEM_REF only if we know that base is valid. */ - if (TREE_CODE (base) == ADDR_EXPR + if ((TREE_CODE (base) == ADDR_EXPR || TREE_CODE (base) == INTEGER_CST) && (!index2 || integer_zerop (index2)) && (!addr->index || integer_zerop (addr->index))) return fold_build2 (MEM_REF, type, base, addr->offset); might hide the issue again (still worth fixing IMHO), and also makes sense.