debug/113488 - DW_AT_abstract_origin to self

Message ID 20240119094240.BAB731388C@imap1.dmz-prg2.suse.org
State Accepted
Headers
Series debug/113488 - DW_AT_abstract_origin to self |

Checks

Context Check Description
snail/gcc-patch-check success Github commit url

Commit Message

Richard Biener Jan. 19, 2024, 9:42 a.m. UTC
  The new sanity check avoiding creating of DIE refs to self triggers
on the PRs testcase when using -g1 and -ffat-lto-objects as while
early DWARF with -g1 doesn't contain any DIEs for LABEL_DECLs later
cloning will still mark DECLs as in if they would via
dwarf2out_abstract_function calling set_block_origin_self.

Instead of messing with the delicate setup of dwarf2out at this stage
the following simply rectifies things after the fact during LTO
streaming when the decl indicates there's an early DIE but there
isn't fixup that indication.

LTO bootstrapped and tested on x86_64-unknwon-linux-gnu, pushed.

	PR debug/113488
	* lto-streamer-in.cc (lto_read_tree_1): When there isn't
	an early DIE but there should be, do not pretend there is.
---
 gcc/lto-streamer-in.cc | 5 +++++
 1 file changed, 5 insertions(+)
  

Patch

diff --git a/gcc/lto-streamer-in.cc b/gcc/lto-streamer-in.cc
index bef0743b2cd..ad0ca24007a 100644
--- a/gcc/lto-streamer-in.cc
+++ b/gcc/lto-streamer-in.cc
@@ -1746,6 +1746,11 @@  lto_read_tree_1 (class lto_input_block *ib, class data_in *data_in, tree expr)
 	  dref_entry e = { expr, str, off };
 	  dref_queue.safe_push (e);
 	}
+      /* When there's no early DIE to refer to but dwarf2out set up
+	 things in a way to expect that fixup.  This tends to happen
+	 with -g1, see for example PR113488.  */
+      else if (DECL_P (expr) && DECL_ABSTRACT_ORIGIN (expr) == expr)
+	DECL_ABSTRACT_ORIGIN (expr) = NULL_TREE;
     }
 }