diff options
author | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-09-12 18:02:36 +0000 |
---|---|---|
committer | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-09-12 18:02:36 +0000 |
commit | 5a1c3f40d81274a0410c44b0b506c2988b5f069c (patch) | |
tree | f62b607052505a7afbe0b2deb379b3ffa886f155 /gcc/builtins.c | |
parent | 29b001432b0febf545cc1f5ad59c932aab0ce3b2 (diff) | |
download | gcc-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.c | 7 |
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]) |