------- Comment #3 from ubizjak at gmail dot com 2010-05-03 16:12 ------- Can you try this patch:
--cut here-- Index: alpha.c =================================================================== --- alpha.c (revision 158970) +++ alpha.c (working copy) @@ -842,7 +842,8 @@ alpha_legitimate_address_p (enum machine #endif /* Register plus a small constant offset is valid. */ - if (GET_CODE (x) == PLUS) + if (mode == DImode + && GET_CODE (x) == PLUS) { rtx ofs = XEXP (x, 1); x = XEXP (x, 0); --cut here-- The core of the problem is 32bit POINTER_MODE, defined in vms.h and the fact, that nothing prevents non-DImode address_operands from entering various expanders. These expanders wrongly assume that decorating match_operand with DI will magically fix wrong mode. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43973