aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2024-01-19 09:50:43 +0100
committerRichard Biener <rguenther@suse.de>2024-01-19 10:43:07 +0100
commit62b59bc4f70d02a485c527aa3277f4b4010edb6b (patch)
treedb152d33f8345c83d9893e240a3bf9f14bbf1f3c /gcc
parent6ce7008cfa1a240895ecca0898e7dbaecd975567 (diff)
downloadgcc-62b59bc4f70d02a485c527aa3277f4b4010edb6b.zip
gcc-62b59bc4f70d02a485c527aa3277f4b4010edb6b.tar.gz
gcc-62b59bc4f70d02a485c527aa3277f4b4010edb6b.tar.bz2
debug/113488 - DW_AT_abstract_origin to self
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. 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.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/lto-streamer-in.cc5
1 files changed, 5 insertions, 0 deletions
diff --git a/gcc/lto-streamer-in.cc b/gcc/lto-streamer-in.cc
index bef0743..ad0ca24 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;
}
}