]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
DWARF: fix ICE caused by offload debug fix
authorAndrew Stubbs <ams@codesourcery.com>
Fri, 26 Feb 2021 11:40:06 +0000 (11:40 +0000)
committerKwok Cheung Yeung <kcy@codesourcery.com>
Tue, 21 Jun 2022 13:11:33 +0000 (14:11 +0100)
This should be squashed with 808bdf1bb29 and fdcb23540a2 to go to mainline.

gcc/

* dwarf2out.cc (gen_subprogram_die): Replace existing low/high PC
attributes, rather than ICE.

gcc/ChangeLog.omp
gcc/dwarf2out.cc

index b246293f9f1c767eb1815c824c0b8b290919a0d1..1052b364689bdebf8b907e37e801a55c1f12fe24 100644 (file)
@@ -1,3 +1,8 @@
+2021-02-26  Andrew Stubbs  <ams@codesourcery.com>
+
+       * dwarf2out.cc (gen_subprogram_die): Replace existing low/high PC
+       attributes, rather than ICE.
+
 2021-02-02  Chung-Lin Tang  <cltang@codesourcery.com>
 
        * omp-offload.cc (omp_finish_file): Add code to create OpenMP requires
index 46e22c7eb91ca2162d0ee134518ef7f7a487d480..f66b25b764d6ba1554fc46906c84dba9ff002a22 100644 (file)
@@ -23761,9 +23761,21 @@ gen_subprogram_die (tree decl, dw_die_ref context_die)
          dw_fde_ref fde = fun->fde;
          if (fde->dw_fde_begin)
            {
-             /* We have already generated the labels.  */
-             add_AT_low_high_pc (subr_die, fde->dw_fde_begin,
-                                 fde->dw_fde_end, false);
+             dw_attr_node *low = get_AT (subr_die, DW_AT_low_pc);
+             dw_attr_node *high = get_AT (subr_die, DW_AT_high_pc);
+             if (low && high)
+               {
+                 /* Replace the existing value, it will have come from
+                    the "omp target entrypoint" case below.  */
+                 free (low->dw_attr_val.v.val_lbl_id);
+                 low->dw_attr_val.v.val_lbl_id = xstrdup (fde->dw_fde_begin);
+                 free (high->dw_attr_val.v.val_lbl_id);
+                 high->dw_attr_val.v.val_lbl_id = xstrdup (fde->dw_fde_end);
+               }
+             else
+               /* We have already generated the labels.  */
+               add_AT_low_high_pc (subr_die, fde->dw_fde_begin,
+                                   fde->dw_fde_end, false);
 
             /* Offload kernel functions are nested within a parent function
                that doesn't actually exist within the offload object.  GDB