http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54699
Bug #: 54699 Summary: [4.8 Regression] [SH] gfortran.dg/class_array_9.f03 ICEs Classification: Unclassified Product: gcc Version: 4.8.0 Status: UNCONFIRMED Keywords: ice-on-valid-code Severity: normal Priority: P3 Component: target AssignedTo: unassig...@gcc.gnu.org ReportedBy: kkoj...@gcc.gnu.org CC: olege...@gcc.gnu.org Target: sh*-*-* gfortran.dg/class_array_9.f03 ICEs for a while on sh4-unknown-linux-gnu. FAIL: gfortran.dg/class_array_9.f03 -O0 (internal compiler error) gfortran.log says: internal compiler error: in change_address_1, at emit-rtl.c:2006 Here is a gdb's backtrace for f951: (gdb) bt #0 internal_error (gmsgid=0x8abd243 "in %s, at %s:%d") at ../../ORIG/trunk/gcc/diagnostic.c:951 #1 0x0897228f in fancy_abort ( file=0x89fedb8 "../../ORIG/trunk/gcc/emit-rtl.c", line=2006, function=0x89feba1 "change_address_1") at ../../ORIG/trunk/gcc/diagnostic.c:1011 #2 0x0832006b in change_address_1 (memref=0xb7db49f0, mode=SFmode, addr=0xb7dcfbe8, validate=1) at ../../ORIG/trunk/gcc/emit-rtl.c:2006 #3 0x08323c9e in adjust_address_1 (memref=0xb7db49f0, mode=SFmode, offset=4, validate=1, adjust_address=1, adjust_object=0) at ../../ORIG/trunk/gcc/emit-rtl.c:2111 #4 0x0836ea01 in alter_subreg (xp=0xb7dcf850) at ../../ORIG/trunk/gcc/final.c:3004 #5 0x0836ec50 in cleanup_subreg_operands (insn=0xb7dd0384) at ../../ORIG/trunk/gcc/final.c:2951 #6 0x0852f941 in reload (first=0xb7dad680, global=0) at ../../ORIG/trunk/gcc/reload1.c:1241 #7 0x08468e49 in do_reload () at ../../ORIG/trunk/gcc/ira.c:4328 #8 rest_of_handle_reload () at ../../ORIG/trunk/gcc/ira.c:4419 #9 0x084e2305 in execute_one_pass (pass=0x8ba03e0) at ../../ORIG/trunk/gcc/passes.c:2199 #10 0x084e26a5 in execute_pass_list (pass=0x8ba03e0) at ../../ORIG/trunk/gcc/passes.c:2254 ---Type <return> to continue, or q <return> to quit---q Quit (gdb) fr 2 #2 0x0832006b in change_address_1 (memref=0xb7db49f0, mode=SFmode, addr=0xb7dcfbe8, validate=1) at ../../ORIG/trunk/gcc/emit-rtl.c:2006 2006 gcc_assert (memory_address_addr_space_p (mode, addr, as)); (gdb) p addr $1 = (rtx_def *) 0xb7dcfbe8 (gdb) call debug_rtx(addr) (plus:SI (reg/f:SI 14 r14) (const_int 4 [0x4])) (gdb) fr 4 #4 0x0836ea01 in alter_subreg (xp=0xb7dcf850) at ../../ORIG/trunk/gcc/final.c:3004 3004 *xp = adjust_address (y, GET_MODE (x), offset); (gdb) p xp $1 = (rtx *) 0xb7dcf850 (gdb) call debug_rtx(*xp) (subreg:SF (mem/c:DI (reg/f:SI 14 r14) [0 %sfp+-200 S8 A32]) 4) (gdb) fr 5 #5 0x0836ec50 in cleanup_subreg_operands (insn=0xb7dd0384) at ../../ORIG/trunk/gcc/final.c:2951 2951 recog_data.operand[i] = alter_subreg (recog_data.operand_loc[i]); (gdb) call debug_rtx(insn) (insn 1124 661 1125 67 (parallel [ (set (subreg:SF (mem/c:DI (reg/f:SI 14 r14) [0 %sfp+-200 S8 A32]) 4) (reg:SF 0 r0)) (use (reg/v:PSI 151 )) (clobber (scratch:SI)) ]) ch9.f03:38 269 {movsf_ie} (nil)) Looks that something wrong happens during reload and it requests an illegal memory address r14+4 for SFmode on SH. It started to fail between trunk revision 185498 and 185552. Perhaps related to the changes for PR target/50751.