public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "cvs-commit at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug c++/114947] [modules] ICE when processing class-scope constrained partial specialisations
Date: Fri, 24 May 2024 00:07:40 +0000	[thread overview]
Message-ID: <bug-114947-4-xEhGV72Dbs@http.gcc.gnu.org/bugzilla/> (raw)
In-Reply-To: <bug-114947-4@http.gcc.gnu.org/bugzilla/>

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114947

--- Comment #1 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Nathaniel Shead <nshead@gcc.gnu.org>:

https://gcc.gnu.org/g:7fa0ffa4f789683ba80e93cd10546cb7bd2c3d8a

commit r15-810-g7fa0ffa4f789683ba80e93cd10546cb7bd2c3d8a
Author: Nathaniel Shead <nathanieloshead@gmail.com>
Date:   Sun May 12 22:31:01 2024 +1000

    c++/modules: Ensure all partial specialisations are tracked [PR114947]

    Constrained partial specialisations aren't all necessarily tracked on
    the instantiation table.  The modules code uses a separate
    'partial_specializations' table to track them instead to ensure that
    they get walked and emitted when emitting a module, but currently this
    does not always happen.

    The attached testcase fails in two ways.  First, because the partial
    specialisation is just a declaration (and not a definition),
    'set_defining_module' never ends up getting called on it and so it never
    gets added to the partial specialisation table.  We fix this by ensuring
    that when partial specializations are created they always get added, and
    so we never miss one. To prevent adding partial specialisations multiple
    times we split this out as a new function.

    The second way it fails is that when exporting the primary interface for
    a module with partitions, we also re-walk the specializations of all
    imported partitions to merge them into a single BMI.  So this patch
    ensures that after calling 'match_mergeable_specialization' we also
    ensure that if the name came from a partition it gets added to the
    specialization table so that a dependency is correctly created for it.

            PR c++/114947

    gcc/cp/ChangeLog:

            * cp-tree.h (set_defining_module_for_partial_spec): Declare.
            * module.cc (trees_in::decl_value): Track partial specs coming
            from partitions.
            (set_defining_module): Don't track partial specialisations here
            anymore.
            (set_defining_module_for_partial_spec): New function.
            * pt.cc (process_partial_specialization): Call it.

    gcc/testsuite/ChangeLog:

            * g++.dg/modules/partial-4_a.C: New test.
            * g++.dg/modules/partial-4_b.C: New test.

    Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com>

  reply	other threads:[~2024-05-24  0:07 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-05  6:05 [Bug c++/114947] New: " nshead at gcc dot gnu.org
2024-05-24  0:07 ` cvs-commit at gcc dot gnu.org [this message]
2024-05-24  0:09 ` [Bug c++/114947] " nshead at gcc dot gnu.org

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=bug-114947-4-xEhGV72Dbs@http.gcc.gnu.org/bugzilla/ \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@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: link
Be 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).