Patchwork Fix debug/49825

login
register
mail settings
Submitter Richard Henderson
Date July 25, 2011, 3:33 a.m.
Message ID <4E2CE3F0.1050501@redhat.com>
Download mbox | patch
Permalink /patch/106605/
State New
Headers show

Comments

Richard Henderson - July 25, 2011, 3:33 a.m.
With the last two fixes, the only remaining i686 regression
from Thursday is 1 fortran testcase, whose number I have 
misplaced.  This highlights an accidental change I made while
moving code around between functions, and an assertion I 
added trying to see if we'd Done The Right Thing already.

The entire treatment of args_size is Very Confusing.
I suspect it ought to be all re-written, but I'll save that
for later once the dust has settled.


r~



	PR debug/49825
	* dwarf2cfi.c (dwarf2out_stack_adjust): Move A_O_A test earlier.
	(dwarf2out_notice_stack_adjust): Use args_size from call_insn.
H.J. Lu - Aug. 10, 2011, 1:57 p.m.
On Sun, Jul 24, 2011 at 8:33 PM, Richard Henderson <rth@redhat.com> wrote:
> With the last two fixes, the only remaining i686 regression
> from Thursday is 1 fortran testcase, whose number I have
> misplaced.  This highlights an accidental change I made while
> moving code around between functions, and an assertion I
> added trying to see if we'd Done The Right Thing already.
>
> The entire treatment of args_size is Very Confusing.
> I suspect it ought to be all re-written, but I'll save that
> for later once the dust has settled.
>
>
> r~
>
>
>
>        PR debug/49825
>        * dwarf2cfi.c (dwarf2out_stack_adjust): Move A_O_A test earlier.
>        (dwarf2out_notice_stack_adjust): Use args_size from call_insn.
>

Not all regressions are fixed.  The last one has a new PR:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49972

Patch

diff --git a/gcc/dwarf2cfi.c b/gcc/dwarf2cfi.c
index 9e64de6..de19d06 100644
--- a/gcc/dwarf2cfi.c
+++ b/gcc/dwarf2cfi.c
@@ -956,14 +956,6 @@  dwarf2out_stack_adjust (HOST_WIDE_INT offset)
   if (cur_trace->cfa_store.reg == dw_stack_pointer_regnum)
     cur_trace->cfa_store.offset += offset;
 
-#ifndef STACK_GROWS_DOWNWARD
-  offset = -offset;
-#endif
-
-  queued_args_size += offset;
-  if (queued_args_size < 0)
-    queued_args_size = 0;
-
   /* ??? The assumption seems to be that if A_O_A, the only CFA adjustments
      involving the stack pointer are inside the prologue and marked as
      RTX_FRAME_RELATED_P.  That said, should we not verify this assumption
@@ -972,6 +964,14 @@  dwarf2out_stack_adjust (HOST_WIDE_INT offset)
   if (ACCUMULATE_OUTGOING_ARGS)
     return;
 
+#ifndef STACK_GROWS_DOWNWARD
+  offset = -offset;
+#endif
+
+  queued_args_size += offset;
+  if (queued_args_size < 0)
+    queued_args_size = 0;
+
   def_cfa_1 (&loc);
   if (flag_asynchronous_unwind_tables)
     dwarf2out_args_size (queued_args_size);
@@ -1016,8 +1016,7 @@  dwarf2out_notice_stack_adjust (rtx insn, bool after_p)
 	  if (GET_CODE (insn) == SET)
 	    insn = SET_SRC (insn);
 	  gcc_assert (GET_CODE (insn) == CALL);
-	  gcc_assert (queued_args_size == INTVAL (XEXP (insn, 1)));
-	  dwarf2out_args_size (queued_args_size);
+	  dwarf2out_args_size (INTVAL (XEXP (insn, 1)));
 	}
       return;
     }