diff mbox

Fixes for debug/50006

Message ID 4E495CB1.3000903@redhat.com
State New
Headers show

Commit Message

Richard Henderson Aug. 15, 2011, 5:51 p.m. UTC
Ada on PA-RISC turned up two different problems with my
patches for REG_ARGS_SIZE.

(1) When we emit_stack_restore, that also zaps any 
accumulated args_size.  Emit the proper notes.

(2) The code at the bottom of alloca was suppressing
the creation of args_size notes, except when the target
provided an allocate_stack named pattern.  Oops.


Sanity checked on x86_64-linux, though the changes really
shouldn't have any effect on that target.

Still waiting to hear if these two are sufficient to return
hppa64-hpux to bootstrap status with Ada, but I've committed
them anyway as I think they're sufficiently obvious.  This
should have affected s390x-linux as well; no one is testing
Ada on that platform?


r~
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.
diff mbox

Patch

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