aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2011-08-15 10:44:11 -0700
committerRichard Henderson <rth@gcc.gnu.org>2011-08-15 10:44:11 -0700
commitefec771ab9763b9c16645a2993d87141dfa734e4 (patch)
tree634a8f76344cab7adcd401a279a6f11669e6bfca /gcc
parent6ea9122292ed4ec58af1656e65dc381bbb24c1ef (diff)
downloadgcc-efec771ab9763b9c16645a2993d87141dfa734e4.zip
gcc-efec771ab9763b9c16645a2993d87141dfa734e4.tar.gz
gcc-efec771ab9763b9c16645a2993d87141dfa734e4.tar.bz2
re PR debug/50006 (ICE in in connect_traces, at dwarf2cfi.c:2677)
PR middle-end/50006 * explow.c (allocate_dynamic_stack_space): Move suppress_reg_args_size setting out to include allocate_stack named pattern as well. * builtins.c (expand_builtin_apply): Add ARG_SIZE 0 note. * stmt.c (expand_stack_restore): Likewise. From-SVN: r177764
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/builtins.c1
-rw-r--r--gcc/explow.c7
-rw-r--r--gcc/stmt.c5
4 files changed, 18 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9523107..811c089 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2011-08-15 Richard Henderson <rth@redhat.com>
+
+ PR middle-end/50006
+ * explow.c (allocate_dynamic_stack_space): Move suppress_reg_args_size
+ setting out to include allocate_stack named pattern as well.
+ * builtins.c (expand_builtin_apply): Add ARG_SIZE 0 note.
+ * stmt.c (expand_stack_restore): Likewise.
+
2011-08-15 Richard Guenther <rguenther@suse.de>
PR middle-end/50082
diff --git a/gcc/builtins.c b/gcc/builtins.c
index e0afc90..da86b8c 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -1680,6 +1680,7 @@ expand_builtin_apply (rtx function, rtx arguments, rtx argsize)
else
#endif
emit_stack_restore (SAVE_BLOCK, old_stack_level);
+ fixup_args_size_notes (call_insn, get_last_insn(), 0);
OK_DEFER_POP;
diff --git a/gcc/explow.c b/gcc/explow.c
index f8262db..beeab44 100644
--- a/gcc/explow.c
+++ b/gcc/explow.c
@@ -1375,6 +1375,9 @@ allocate_dynamic_stack_space (rtx size, unsigned size_align,
else if (flag_stack_check == STATIC_BUILTIN_STACK_CHECK)
probe_stack_range (STACK_CHECK_PROTECT, size);
+ /* Don't let anti_adjust_stack emit notes. */
+ suppress_reg_args_size = true;
+
/* Perform the required allocation from the stack. Some systems do
this differently than simply incrementing/decrementing from the
stack pointer, such as acquiring the space by calling malloc(). */
@@ -1425,7 +1428,6 @@ allocate_dynamic_stack_space (rtx size, unsigned size_align,
}
saved_stack_pointer_delta = stack_pointer_delta;
- suppress_reg_args_size = true;
if (flag_stack_check && STACK_CHECK_MOVING_SP)
anti_adjust_stack_and_probe (size, false);
@@ -1436,13 +1438,14 @@ allocate_dynamic_stack_space (rtx size, unsigned size_align,
The constant size alloca should preserve
crtl->preferred_stack_boundary alignment. */
stack_pointer_delta = saved_stack_pointer_delta;
- suppress_reg_args_size = false;
#ifdef STACK_GROWS_DOWNWARD
emit_move_insn (target, virtual_stack_dynamic_rtx);
#endif
}
+ suppress_reg_args_size = false;
+
/* Finish up the split stack handling. */
if (final_label != NULL_RTX)
{
diff --git a/gcc/stmt.c b/gcc/stmt.c
index 2fb4b18..be21a57 100644
--- a/gcc/stmt.c
+++ b/gcc/stmt.c
@@ -2016,10 +2016,13 @@ expand_stack_save (void)
void
expand_stack_restore (tree var)
{
- rtx sa = expand_normal (var);
+ rtx prev, sa = expand_normal (var);
sa = convert_memory_address (Pmode, sa);
+
+ prev = get_last_insn ();
emit_stack_restore (SAVE_BLOCK, sa);
+ fixup_args_size_notes (prev, get_last_insn (), 0);
}
/* Do the insertion of a case label into case_list. The labels are