diff mbox

Fix a typo in dwarf2out.c:resolve_args_picking_1

Message ID 1462284340-27207-1-git-send-email-derodat@adacore.com
State New
Headers show

Commit Message

Pierre-Marie de Rodat May 3, 2016, 2:05 p.m. UTC
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!

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

Comments

Richard Biener May 3, 2016, 3:41 p.m. UTC | #1
On May 3, 2016 4:05:40 PM GMT+02:00, Pierre-Marie de Rodat <derodat@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;
Pierre-Marie de Rodat May 3, 2016, 4:22 p.m. UTC | #2
On 05/03/2016 05:41 PM, Richard Biener wrote:
>> This change fixes this typo. Bootstrapped and regtested on x86_64-linux
>> successfuly. Ok to commit? Thank you in advance!
>
> OK also for branches.

Comitted to trunk and gcc-6-branch. Thank you!
diff mbox

Patch

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;