------- Comment #3 from ebotcazou at gcc dot gnu dot org 2010-07-27 20:15 ------- Introduced by the fix for PR middle-end/44790:
2010-07-07 Richard Guenther <rguent...@suse.de> PR middle-end/44790 * expr.c (expand_expr_real_1): Go the POINTER_PLUS_EXPR path for expanding the constant offset for MEM_REFs. The problem is that: name = MEM[(struct exp_ch3__make_predefined_primitive_specs__B_99__stream_op_tss_names___PAD *)D.14526_1156 + 4294967296B]; is expanded into sethi %hi(stream_op_tss_names.6060+4294967296), %l2 or %l2, %lo(stream_op_tss_names.6060+4294967296), %l2 which overflows since sethi is a 32-bit operator. Going through POINTER_PLUS_EXPR to expand a const addresss apparently bypasses checks for valid addresses in the back-end. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44993