------- Comment #6 from dje at gcc dot gnu dot org 2006-10-12 23:02 ------- The reason this is going off the rails is a "long" index invokes expand_expr_real_1 with PLUS_EXP and modifier=EXPAND_NORMAL while "long long" invokes it with modifier=EXPAND_SUM. For EXPAND_NORMAL, GCC invokes expand_operands() and then calls expand_binop(), which tests predicates. For EXPAND_SUM, expand_operands() is followed by simplify_gen_binary(), which does not check predicates. Invalid RTL is created and fun ensues.
-- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29250