public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/114947] New: [modules] ICE when processing class-scope constrained partial specialisations
@ 2024-05-05 6:05 nshead at gcc dot gnu.org
2024-05-24 0:07 ` [Bug c++/114947] " cvs-commit at gcc dot gnu.org
2024-05-24 0:09 ` nshead at gcc dot gnu.org
0 siblings, 2 replies; 3+ messages in thread
From: nshead at gcc dot gnu.org @ 2024-05-05 6:05 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114947
Bug ID: 114947
Summary: [modules] ICE when processing class-scope constrained
partial specialisations
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: nshead at gcc dot gnu.org
Target Milestone: ---
The following code ICEs on trunk:
// part.cpp
module M:part;
struct A {
template <typename> struct R;
template <typename T> requires false struct R<T>;
template <typename T> requires true struct R<T>;
};
template <typename T> int foo(T, int);
template <typename T> int foo(T, A);
void go() { foo(0, 0); }
// m.cpp
export module M;
export import :part;
This is ultimately because 'set_defining_module' is not called on the partial
specialisation declarations of R. This is a regression since r15-101, found
while reducing the following testcase that also ICEs even before this change:
// a.cpp
module;
#include <format>
export module M:a;
// b.cpp
module;
#include <format>
export module M:b;
// m.cpp
export module M;
export import :a;
export import :b;
^ permalink raw reply [flat|nested] 3+ messages in thread
* [Bug c++/114947] [modules] ICE when processing class-scope constrained partial specialisations
2024-05-05 6:05 [Bug c++/114947] New: [modules] ICE when processing class-scope constrained partial specialisations nshead at gcc dot gnu.org
@ 2024-05-24 0:07 ` cvs-commit at gcc dot gnu.org
2024-05-24 0:09 ` nshead at gcc dot gnu.org
1 sibling, 0 replies; 3+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2024-05-24 0:07 UTC (permalink / raw)
To: gcc-bugs
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>
^ permalink raw reply [flat|nested] 3+ messages in thread
* [Bug c++/114947] [modules] ICE when processing class-scope constrained partial specialisations
2024-05-05 6:05 [Bug c++/114947] New: [modules] ICE when processing class-scope constrained partial specialisations nshead at gcc dot gnu.org
2024-05-24 0:07 ` [Bug c++/114947] " cvs-commit at gcc dot gnu.org
@ 2024-05-24 0:09 ` nshead at gcc dot gnu.org
1 sibling, 0 replies; 3+ messages in thread
From: nshead at gcc dot gnu.org @ 2024-05-24 0:09 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114947
Nathaniel Shead <nshead at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Resolution|--- |FIXED
Target Milestone|--- |15.0
Status|UNCONFIRMED |RESOLVED
--- Comment #2 from Nathaniel Shead <nshead at gcc dot gnu.org> ---
Fixed for GCC 15.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-05-24 0:09 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-05-05 6:05 [Bug c++/114947] New: [modules] ICE when processing class-scope constrained partial specialisations nshead at gcc dot gnu.org
2024-05-24 0:07 ` [Bug c++/114947] " cvs-commit at gcc dot gnu.org
2024-05-24 0:09 ` nshead at gcc dot gnu.org
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).