[Bug c/43973] alpha libiberty/regex.c fails to compile with -O2 without -mbwx (internal compiler error)
--- 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
[Bug c/43973] alpha libiberty/regex.c fails to compile with -O2 without -mbwx (internal compiler error)
--- Comment #2 from ubizjak at gmail dot com 2010-05-03 13:46 --- Hm, in expand_assignment (), around line 4408 in expr.c, we expand MEM[base: pfrom_8, offset: 1] to (mem:QI (plus:DI (subreg/s:SI (reg/v/f:DI 108 [ pfrom ]) 0) (const_int 1 [0x1])) [0 *pfrom_8 S1 A8]) IMO, the usage of subregs is kind of suspicious since this is invalid RTX. -- ubizjak at gmail dot com changed: What|Removed |Added CC||ubizjak at gmail dot com http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43973
[Bug c/43973] alpha libiberty/regex.c fails to compile with -O2 without -mbwx (internal compiler error)
--- Comment #1 from ubizjak at gmail dot com 2010-05-03 12:09 --- Confirmed with a cross from x86_64-pc-linux-gnu to alpha-dec-vms. -- ubizjak at gmail dot com changed: What|Removed |Added Status|UNCONFIRMED |NEW Ever Confirmed|0 |1 Last reconfirmed|-00-00 00:00:00 |2010-05-03 12:09:50 date|| http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43973