On 4/30/24 00:59, Nathaniel Shead wrote:
On Sun, Apr 14, 2024 at 01:40:18AM +1000, Nathaniel Shead wrote:
On Fri, Apr 12, 2024 at 01:50:47PM -0400, Jason Merrill wrote:
On 4/11/24 20:40, Nathaniel Shead wrote:
Bootstrapped and regtested on x86_64-pc-linux-gnu, OK for trunk?
-- >8 --
The modules code currently neglects to set OVL_USING_P on the dependency
created for a using-decl, which causes it not to remember that the
OVL_EXPORT_P flag had been set on it when emitted from the primary
interface unit. This patch ensures that it occurs.
gcc/cp/ChangeLog:
* module.cc (depset::hash::add_binding_entity): Propagate
OVL_USING_P for using-declarations.
gcc/testsuite/ChangeLog:
* g++.dg/modules/using-15_a.C: New test.
* g++.dg/modules/using-15_b.C: New test.
* g++.dg/modules/using-15_c.C: New test.
Signed-off-by: Nathaniel Shead <nathanielosh...@gmail.com>
---
gcc/cp/module.cc | 4 ++++
gcc/testsuite/g++.dg/modules/using-15_a.C | 13 +++++++++++++
gcc/testsuite/g++.dg/modules/using-15_b.C | 5 +++++
gcc/testsuite/g++.dg/modules/using-15_c.C | 7 +++++++
4 files changed, 29 insertions(+)
create mode 100644 gcc/testsuite/g++.dg/modules/using-15_a.C
create mode 100644 gcc/testsuite/g++.dg/modules/using-15_b.C
create mode 100644 gcc/testsuite/g++.dg/modules/using-15_c.C
diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc
index 9d054c4c792..527c9046c67 100644
--- a/gcc/cp/module.cc
+++ b/gcc/cp/module.cc
@@ -12915,10 +12915,12 @@ depset::hash::add_binding_entity (tree decl,
WMB_Flags flags, void *data_)
/* Ignore NTTP objects. */
return false;
+ bool unscoped_enum_const_p = false;
if (!(flags & WMB_Using) && CP_DECL_CONTEXT (decl) != data->ns)
{
/* A using that lost its wrapper or an unscoped enum
constant. */
+ unscoped_enum_const_p = (TREE_CODE (decl) == CONST_DECL);
How does this interact with C++20 using enum?
Looks like it ignores those (so they still suffer from this error). But
in general we don't handle usings of non-functions correctly anyway yet
(for the reasons I described in the cover letter); I just added this for
now to prevent regressing some test-cases caused by importing enum
consts wrapped in an OVERLOAD.
Otherwise happy to defer this patch until GCC 15 when I can look at
exploring what needs to be done to handle non-function using-decls
correctly, but I'll need to work out a new testcase for the followup
patch in this series (or just defer that one too, I suppose).
Ping. Or should I just scrap this patch for now, find a new testcase
for the followup patch, and submit it again once we have a general
solution for using-decls of non-functions?
Please add a FIXME about using enum here and a using enum testcase to
the appropriate PR; OK for trunk and 14.2 with that change.
Jason