From faf7a23d6d3bc281c386865971f7bffd8cb7057c Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Thu, 4 Aug 2011 08:39:40 -0700 Subject: 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 --- gcc/calls.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) (limited to 'gcc/calls.c') 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; -- cgit v1.1