summaryrefslogtreecommitdiff
path: root/gcc/builtins.c
diff options
context:
space:
mode:
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>2006-09-12 18:02:36 +0000
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>2006-09-12 18:02:36 +0000
commit5a1c3f40d81274a0410c44b0b506c2988b5f069c (patch)
treef62b607052505a7afbe0b2deb379b3ffa886f155 /gcc/builtins.c
parent29b001432b0febf545cc1f5ad59c932aab0ce3b2 (diff)
downloadgcc-5a1c3f40d81274a0410c44b0b506c2988b5f069c.tar.gz
PR middle-end/28493
* builtins.c (expand_builtin_setjmp_receiver): Clobber hard_frame_pointer_rtx after using it to update the frame pointer. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@116900 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/builtins.c')
-rw-r--r--gcc/builtins.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/builtins.c b/gcc/builtins.c
index 5bcba14d7c2..4684a5482ad 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -679,7 +679,12 @@ expand_builtin_setjmp_receiver (rtx receiver_label ATTRIBUTE_UNUSED)
#ifdef HAVE_nonlocal_goto
if (! HAVE_nonlocal_goto)
#endif
- emit_move_insn (virtual_stack_vars_rtx, hard_frame_pointer_rtx);
+ {
+ emit_move_insn (virtual_stack_vars_rtx, hard_frame_pointer_rtx);
+ /* This might change the hard frame pointer in ways that aren't
+ apparent to early optimization passes, so force a clobber. */
+ emit_insn (gen_rtx_CLOBBER (VOIDmode, hard_frame_pointer_rtx));
+ }
#if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
if (fixed_regs[ARG_POINTER_REGNUM])