public inbox for gcc-cvs@sourceware.org help / color / mirror / Atom feed
From: Richard Biener <rguenth@gcc.gnu.org> To: gcc-cvs@gcc.gnu.org Subject: [gcc r13-7468] debug/110295 - mixed up early/late debug for member DIEs Date: Fri, 23 Jun 2023 10:30:05 +0000 (GMT) [thread overview] Message-ID: <20230623103005.EC2E43858280@sourceware.org> (raw) https://gcc.gnu.org/g:0b69fea6cf12d82f82439f26527ef8721e24411e commit r13-7468-g0b69fea6cf12d82f82439f26527ef8721e24411e Author: Richard Biener <rguenther@suse.de> Date: Mon Jun 19 09:23:16 2023 +0200 debug/110295 - mixed up early/late debug for member DIEs When we process a scope typedef during early debug creation and we have already created a DIE for the type when the decl is TYPE_DECL_IS_STUB and this DIE is still in limbo we end up just re-parenting that type DIE instead of properly creating a DIE for the decl, eventually picking up the now completed type and creating DIEs for the members. Instead this is currently defered to the second time we come here, when we annotate the DIEs with locations late where now the type DIE is no longer in limbo and we fall through doing the job for the decl. The following makes sure we perform the necessary early tasks for this by continuing with the decl DIE creation after setting a parent for the limbo type DIE. PR debug/110295 * dwarf2out.cc (process_scope_var): Continue processing the decl after setting a parent in case the existing DIE was in limbo. * g++.dg/debug/pr110295.C: New testcase. (cherry picked from commit 963f87f8a65ec82f503ac4334a3da83b0a8a43b2) Diff: --- gcc/dwarf2out.cc | 3 ++- gcc/testsuite/g++.dg/debug/pr110295.C | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/gcc/dwarf2out.cc b/gcc/dwarf2out.cc index 1a0015ce00f..4ab625498c9 100644 --- a/gcc/dwarf2out.cc +++ b/gcc/dwarf2out.cc @@ -26534,7 +26534,8 @@ process_scope_var (tree stmt, tree decl, tree origin, dw_die_ref context_die) if (die != NULL && die->die_parent == NULL) add_child_die (context_die, die); - else if (TREE_CODE (decl_or_origin) == IMPORTED_DECL) + + if (TREE_CODE (decl_or_origin) == IMPORTED_DECL) { if (early_dwarf) dwarf2out_imported_module_or_decl_1 (decl_or_origin, DECL_NAME (decl_or_origin), diff --git a/gcc/testsuite/g++.dg/debug/pr110295.C b/gcc/testsuite/g++.dg/debug/pr110295.C new file mode 100644 index 00000000000..10cad557095 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/pr110295.C @@ -0,0 +1,19 @@ +// { dg-do compile } +// { dg-options "-g" } + +template <typename T> +struct QCachedT +{ + void operator delete(void *, T *) {} +}; +template<int a> +void exercise() +{ + struct thing_t + : QCachedT<thing_t> + { + }; + thing_t *list[1]; + new thing_t; // { dg-warning "" } +} +int main() { exercise<1>(); }
reply other threads:[~2023-06-23 10:30 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20230623103005.EC2E43858280@sourceware.org \ --to=rguenth@gcc.gnu.org \ --cc=gcc-cvs@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).