------- Additional Comments From danglin at gcc dot gnu dot org 2004-12-20 04:36 ------- Hmmm, why "-mportable-runtime"? This was intended I believe for PA 1.0 chips in embedded applications and isn't used or tested much any more.
I can only duplicate on linux. At the moment, I don't know how this can happen. We have the following insn when the ICE occurs: (insn 36 16 37 0 (set (reg:SI 2 %r2) (mem:SI (plus:SI (reg/f:SI 30 %r30) (const_int -20 [0xffffffec])) [0 S4 A32])) -1 (nil) (nil)) (insn 37 36 17 0 (unspec_volatile [ (const_int 2 [0x2]) ] 0) -1 (nil) (nil)) (call_insn/j 17 37 18 0 (parallel [ (set (reg:SI 28 %r28) (call (mem:SI (reg:SI 22 %r22) [0 S4 A32]) (const_int 16 [0x10]))) (clobber (reg:SI 1 %r1)) (clobber (reg:SI 2 %r2)) (use (const_int 1 [0x1])) ]) 207 {call_val_reg} (insn_list:REG_DEP_ANTI 13 (insn_list:REG_DEP_TRUE 16 (nil))) (expr_list:REG_DEAD (reg:SI 26 %r26 [ size ]) (expr_list:REG_DEAD (reg:SI 22 %r22) (expr_list:REG_UNUSED (reg:SI 2 %r2) (expr_list:REG_UNUSED (reg:SI 1 %r1) (nil))))) (expr_list:REG_DEP_TRUE (use (reg:SI 26 %r26 [ size ])) (nil))) (barrier 18 17 20) (note 20 18 33 NOTE_INSN_FUNCTION_END) (note 33 20 0 NOTE_INSN_DELETED) $5 = void Somehow, it looks as if the epilogue has been emitted in the wrong place (i.e., before insn 17 which is in the body of the function. It looks to me like this is caused by thread_prologue_and_epilogue_insns treating insn 17 as a sibling call. The hpux port doesn't allow sibcalls in the portable runtime. I think I see how to fix this but I'm still wonder why you would want to use -mportable-runtime on linux. The call sequences are much less efficient. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17643