aboutsummaryrefslogtreecommitdiff
path: root/gcc/calls.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2011-08-04 08:39:40 -0700
committerRichard Henderson <rth@gcc.gnu.org>2011-08-04 08:39:40 -0700
commitfaf7a23d6d3bc281c386865971f7bffd8cb7057c (patch)
tree31c68b481009457f22ecf8ae103929ff23f553af /gcc/calls.c
parent0319cacc3928720fda058dc7e6c60f575169f576 (diff)
downloadgcc-faf7a23d6d3bc281c386865971f7bffd8cb7057c.zip
gcc-faf7a23d6d3bc281c386865971f7bffd8cb7057c.tar.gz
gcc-faf7a23d6d3bc281c386865971f7bffd8cb7057c.tar.bz2
re PR middle-end/49968 (ICE in calls.c:3141 / assert after emit_stack_restore)
PR middle-end/49968 * calls.c (expand_call): Use fixup_args_size_notes for emit_stack_restore. * expr.c (fixup_args_size_notes): Allow STACK_POINTER_REGNUM sets in non-standard modes. From-SVN: r177404
Diffstat (limited to 'gcc/calls.c')
-rw-r--r--gcc/calls.c10
1 files changed, 2 insertions, 8 deletions
diff --git a/gcc/calls.c b/gcc/calls.c
index 6eb1f21..26c3200 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -3128,18 +3128,12 @@ expand_call (tree exp, rtx target, int ignore)
if (old_stack_level)
{
- rtx last, set;
+ rtx prev = get_last_insn ();
emit_stack_restore (SAVE_BLOCK, old_stack_level);
stack_pointer_delta = old_stack_pointer_delta;
- /* ??? Is this assert warrented, given emit_stack_restore?
- or should we just mark the last insn no matter what? */
- last = get_last_insn ();
- set = single_set (last);
- gcc_assert (set != NULL);
- gcc_assert (SET_DEST (set) == stack_pointer_rtx);
- add_reg_note (last, REG_ARGS_SIZE, GEN_INT (stack_pointer_delta));
+ fixup_args_size_notes (prev, get_last_insn (), stack_pointer_delta);
pending_stack_adjust = old_pending_adj;
old_stack_allocated = stack_pointer_delta - pending_stack_adjust;