Fix a typo in dwarf2out.c:resolve_args_picking_1
authorPierre-Marie de Rodat <derodat@adacore.com>
Tue, 3 May 2016 16:21:14 +0000 (16:21 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Tue, 3 May 2016 16:21:14 +0000 (16:21 +0000)
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.

gcc/
* dwarf2out.c (resolve_args_picking_1): Replace the frame_offset
occurence with frame_offset_ ones.

gcc/testsuite/
* gnat.dg/debug5.adb: New testcase.

From-SVN: r235830

gcc/ChangeLog
gcc/dwarf2out.c
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/debug5.adb [new file with mode: 0644]

index 7cd0bd4f73de1033539dc13b9e40d5b628c0db88..1a85213eca6bc4504fe5179d5d368f2cba9c0e2d 100644 (file)
@@ -1,3 +1,8 @@
+2016-05-03  Pierre-Marie de Rodat  <derodat@adacore.com>
+
+       * dwarf2out.c (resolve_args_picking_1): Replace the frame_offset
+       occurence with frame_offset_ ones.
+
 2016-05-03  Alan Modra  <amodra@gmail.com>
 
        PR rtl-optimization/70890
index 463863dc381dd1240bd8745a46fa674476755b42..ab851f4628b3d5cc7c53c611ea244b670f80c9a7 100644 (file)
@@ -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;
          }
 
index 3ff4ea4d8f876256ab16590e72c3e90181197617..818a1775c5905021ef63e1ef7f2d85ee2f509418 100644 (file)
@@ -1,3 +1,7 @@
+2016-05-03  Pierre-Marie de Rodat  <derodat@adacore.com>
+
+       * gnat.dg/debug5.adb: New testcase.
+
 2016-05-03  Dominik Vogt  <vogt@linux.vnet.ibm.com>
 
        * gcc.target/s390/md/rXsbg_mode_sXl.c: New test.
diff --git a/gcc/testsuite/gnat.dg/debug5.adb b/gcc/testsuite/gnat.dg/debug5.adb
new file mode 100644 (file)
index 0000000..6569a15
--- /dev/null
@@ -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;