On May 3, 2016 4:05:40 PM GMT+02:00, Pierre-Marie de Rodat <dero...@adacore.com> wrote: >Hello, > >Under specific circumstances for Ada programs, such as in the testcase >this change adds, the DWARF back-end currently crashes because of >inconsistent internal state. This is due to a typo: a local variable is >called frame_offset_ but resolve_args_picking_1 wrongly modifies >emit-rtl.h's frame_offset instead. > >This change fixes this typo. Bootstrapped and regtested on x86_64-linux >successfuly. Ok to commit? Thank you in advance!
OK also for branches. Richard. >gcc/ > * dwarf2out.c (resolve_args_picking_1): Replace the frame_offset > occurence with frame_offset_ ones. > >gcc/testsuite/ > * gnat.dg/debug5.adb: New testcase. >--- > gcc/dwarf2out.c | 2 +- > gcc/testsuite/gnat.dg/debug5.adb | 22 ++++++++++++++++++++++ > 2 files changed, 23 insertions(+), 1 deletion(-) > create mode 100644 gcc/testsuite/gnat.dg/debug5.adb > >diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c >index 463863d..ab851f4 100644 >--- a/gcc/dwarf2out.c >+++ b/gcc/dwarf2out.c >@@ -15571,7 +15571,7 @@ resolve_args_picking_1 (dw_loc_descr_ref loc, >unsigned initial_frame_offset, > > if (stack_usage == NULL) > return false; >- frame_offset += *stack_usage; >+ frame_offset_ += *stack_usage; > break; > } > >diff --git a/gcc/testsuite/gnat.dg/debug5.adb >b/gcc/testsuite/gnat.dg/debug5.adb >new file mode 100644 >index 0000000..6569a15 >--- /dev/null >+++ b/gcc/testsuite/gnat.dg/debug5.adb >@@ -0,0 +1,22 @@ >+-- { dg-do compile } >+-- { dg-options "-g" } >+ >+procedure Debug5 is >+ >+ type Record_Type (L1, L2 : Natural) is record >+ S1 : String (1 .. L1); >+ case L2 is >+ when 0 => null; >+ when others => S2 : String (L1 .. L2); >+ end case; >+ end record; >+ >+ procedure Discard (R : Record_Type) is >+ begin >+ null; >+ end Discard; >+ >+ R : constant Record_Type := (0, 0, others => <>); >+begin >+ Discard (R); >+end Debug5;