This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Fix debug/49825
- From: Richard Henderson <rth at redhat dot com>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Sun, 24 Jul 2011 20:07:24 -0700
- Subject: Fix debug/49825
Tested on i686-linux. I'm not sure how I missed this with {,-m32}
testing on x86_64.
r~
PR debug/49825
* dwarf2cfi.c (cfi_row_equal_p): Don't compare args_size.
diff --git a/gcc/dwarf2cfi.c b/gcc/dwarf2cfi.c
index 3ff4c61..f715e07 100644
--- a/gcc/dwarf2cfi.c
+++ b/gcc/dwarf2cfi.c
@@ -667,8 +667,15 @@ cfi_row_equal_p (dw_cfi_row *a, dw_cfi_row *b)
else if (!cfa_equal_p (&a->cfa, &b->cfa))
return false;
- if (a->args_size != b->args_size)
- return false;
+ /* Logic suggests that we compare args_size here. However, if
+ EXIT_IGNORE_STACK we don't bother tracking the args_size after
+ the last time it really matters within the function. This does
+ in fact lead to paths with differing arg_size, but in cases for
+ which it doesn't matter. */
+ /* ??? If we really want to sanity check the output of the optimizers,
+ find a way to backtrack from epilogues to the last EH site. This
+ would allow us to distinguish regions with garbage args_size and
+ regions where paths ought to agree. */
n_a = VEC_length (dw_cfi_ref, a->reg_save);
n_b = VEC_length (dw_cfi_ref, b->reg_save);