------- Comment #15 from jason at gcc dot gnu dot org  2006-09-08 07:14 -------
The bug is in expand_builtin_setjmp_receiver:

  /* Now put in the code to restore the frame pointer, and argument
     pointer, if needed.  */
[...]
  emit_move_insn (virtual_stack_vars_rtx, hard_frame_pointer_rtx);

This is wrong for PPC, and indeed any target with non-zero
STARTING_FRAME_OFFSET.  A casual glance at the virtual register elimination
code in function.c makes it clear that these two are not always equal.  We
could fix this by changing it to

  emit_move_insn (virtual_stack_vars_rtx,
                  plus_constant (hard_frame_pointer_rtx,
                                 STARTING_FRAME_OFFSET));

but is there any reason not to just do

  emit_move_insn (frame_pointer_rtx, hard_frame_pointer_rtx);

?


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28493

Reply via email to