From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1873) id 24399383D5EC; Sun, 11 Dec 2022 18:03:06 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 24399383D5EC DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1670781786; bh=uNCoFcp5A7NakjuLCLeKMITkJHS59W1t6a7UZGY8gWA=; h=From:To:Subject:Date:From; b=A1ifjF/M2+DIx2r4MbZHsmk4ba7fWvvj4hlHoM6Y9LEf0prIc6mA7e0F24T/B/Gkj cFPUD18grgXVl7hD1BH3R3gNFF0eeejCX/k6N88KjUE2aVE61tw/W5IPXEEujOSz8p Oxb8+SA/E52eLXkE/KZtJgp9xXQsq7EuoH5pCOgc= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Iain Buclaw To: gcc-cvs@gcc.gnu.org Subject: [gcc r10-11116] d: Fix internal compiler error: in visit, at d/imports.cc:72 (PR108050) X-Act-Checkin: gcc X-Git-Author: Iain Buclaw X-Git-Refname: refs/heads/releases/gcc-10 X-Git-Oldrev: e5aeaae1018be412eb460374d0b54d312a4db05a X-Git-Newrev: 9d18a4b98d9b6bff4ba8b215f1e66e51ffba9638 Message-Id: <20221211180306.24399383D5EC@sourceware.org> Date: Sun, 11 Dec 2022 18:03:06 +0000 (GMT) List-Id: https://gcc.gnu.org/g:9d18a4b98d9b6bff4ba8b215f1e66e51ffba9638 commit r10-11116-g9d18a4b98d9b6bff4ba8b215f1e66e51ffba9638 Author: Iain Buclaw Date: Sat Dec 10 19:12:43 2022 +0100 d: Fix internal compiler error: in visit, at d/imports.cc:72 (PR108050) The visitor for lowering IMPORTED_DECLs did not have an override for dealing with importing OverloadSet symbols. This has now been implemented in the code generator. PR d/108050 gcc/d/ChangeLog: * decl.cc (DeclVisitor::visit (Import *)): Handle build_import_decl returning a TREE_LIST. * imports.cc (ImportVisitor::visit (OverloadSet *)): New override. gcc/testsuite/ChangeLog: * gdc.dg/imports/pr108050/mod1.d: New. * gdc.dg/imports/pr108050/mod2.d: New. * gdc.dg/imports/pr108050/package.d: New. * gdc.dg/pr108050.d: New test. (cherry picked from commit d9d8c9674ad3ad3aa38419d24b1aaaffe31f5d3f) Diff: --- gcc/d/decl.cc | 12 ++++++++++-- gcc/d/imports.cc | 14 ++++++++++++++ gcc/testsuite/gdc.dg/imports/pr108050/mod1.d | 2 ++ gcc/testsuite/gdc.dg/imports/pr108050/mod2.d | 2 ++ gcc/testsuite/gdc.dg/imports/pr108050/package.d | 2 ++ gcc/testsuite/gdc.dg/pr108050.d | 4 ++++ 6 files changed, 34 insertions(+), 2 deletions(-) diff --git a/gcc/d/decl.cc b/gcc/d/decl.cc index 94f941f65a3..b9078b235c7 100644 --- a/gcc/d/decl.cc +++ b/gcc/d/decl.cc @@ -181,8 +181,16 @@ public: tree name = (alias != NULL) ? get_identifier (alias->toChars ()) : NULL_TREE; - debug_hooks->imported_module_or_decl (decl, name, context, - false, false); + if (TREE_CODE (decl) != TREE_LIST) + debug_hooks->imported_module_or_decl (decl, name, context, + false, false); + else + { + /* Overload sets return a list of imported decls. */ + for (; decl != NULL_TREE; decl = TREE_CHAIN (decl)) + debug_hooks->imported_module_or_decl (TREE_VALUE (decl), name, + context, false, false); + } } } else diff --git a/gcc/d/imports.cc b/gcc/d/imports.cc index 2e3eb7408b7..e72f1ea00ac 100644 --- a/gcc/d/imports.cc +++ b/gcc/d/imports.cc @@ -157,6 +157,20 @@ public: } } + /* Build IMPORTED_DECLs for all overloads in a set. */ + void visit (OverloadSet *d) + { + vec *tset = NULL; + + vec_alloc (tset, d->a.dim); + + for (size_t i = 0; i < d->a.dim; i++) + vec_safe_push (tset, build_import_decl (d->a[i])); + + d->isym = build_tree_list_vec (tset); + tset->truncate (0); + } + /* Function aliases are the same as alias symbols. */ void visit (FuncAliasDeclaration *d) { diff --git a/gcc/testsuite/gdc.dg/imports/pr108050/mod1.d b/gcc/testsuite/gdc.dg/imports/pr108050/mod1.d new file mode 100644 index 00000000000..f27a13dc051 --- /dev/null +++ b/gcc/testsuite/gdc.dg/imports/pr108050/mod1.d @@ -0,0 +1,2 @@ +module imports.pr108050.mod1; +string[] split() { return null; } diff --git a/gcc/testsuite/gdc.dg/imports/pr108050/mod2.d b/gcc/testsuite/gdc.dg/imports/pr108050/mod2.d new file mode 100644 index 00000000000..29d8aa8f53e --- /dev/null +++ b/gcc/testsuite/gdc.dg/imports/pr108050/mod2.d @@ -0,0 +1,2 @@ +module imports.pr108050.mod2; +string[] split() { return null; } diff --git a/gcc/testsuite/gdc.dg/imports/pr108050/package.d b/gcc/testsuite/gdc.dg/imports/pr108050/package.d new file mode 100644 index 00000000000..b8b03b832af --- /dev/null +++ b/gcc/testsuite/gdc.dg/imports/pr108050/package.d @@ -0,0 +1,2 @@ +module imports.pr108050; +public import imports.pr108050.mod1, imports.pr108050.mod2; diff --git a/gcc/testsuite/gdc.dg/pr108050.d b/gcc/testsuite/gdc.dg/pr108050.d new file mode 100644 index 00000000000..69134e73137 --- /dev/null +++ b/gcc/testsuite/gdc.dg/pr108050.d @@ -0,0 +1,4 @@ +// { dg-do compile } +// { dg-additional-sources "imports/pr108050/package.d imports/pr108050/mod1.d imports/pr108050/mod2.d" } +// { dg-options "-g" } +import imports.pr108050 : split;