public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Nathaniel Shead <nathanieloshead@gmail.com>
To: Jason Merrill <jason@redhat.com>
Cc: gcc-patches@gcc.gnu.org, Nathan Sidwell <nathan@acm.org>,
	Patrick Palka <ppalka@redhat.com>
Subject: Re: [PATCH 2/3] c++/modules: Propagate using decls from partitions
Date: Sun, 14 Apr 2024 01:40:18 +1000	[thread overview]
Message-ID: <661aa767.170a0220.a291e.1721@mx.google.com> (raw)
In-Reply-To: <6b74f1ea-e301-4f1c-9f21-4dc2ab78d924@redhat.com>

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 <nathanieloshead@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).

> >   	  flags = WMB_Flags (flags | WMB_Using);
> >   	  if (DECL_MODULE_EXPORT_P (TREE_CODE (decl) == CONST_DECL
> >   				    ? TYPE_NAME (TREE_TYPE (decl))
> > @@ -12979,6 +12981,8 @@ depset::hash::add_binding_entity (tree decl, WMB_Flags flags, void *data_)
> >         if (flags & WMB_Using)
> >   	{
> >   	  decl = ovl_make (decl, NULL_TREE);
> > +	  if (!unscoped_enum_const_p)
> > +	    OVL_USING_P (decl) = true;
> >   	  if (flags & WMB_Export)
> >   	    OVL_EXPORT_P (decl) = true;
> >   	}
> > diff --git a/gcc/testsuite/g++.dg/modules/using-15_a.C b/gcc/testsuite/g++.dg/modules/using-15_a.C
> > new file mode 100644
> > index 00000000000..23895bd8c4a
> > --- /dev/null
> > +++ b/gcc/testsuite/g++.dg/modules/using-15_a.C
> > @@ -0,0 +1,13 @@
> > +// { dg-additional-options "-fmodules-ts -Wno-global-module" }
> > +// { dg-module-cmi M:a }
> > +
> > +module;
> > +namespace foo {
> > +  void a();
> > +};
> > +export module M:a;
> > +
> > +namespace bar {
> > +  // propagate usings from partitions
> > +  export using foo::a;
> > +};
> > diff --git a/gcc/testsuite/g++.dg/modules/using-15_b.C b/gcc/testsuite/g++.dg/modules/using-15_b.C
> > new file mode 100644
> > index 00000000000..a88f86af61f
> > --- /dev/null
> > +++ b/gcc/testsuite/g++.dg/modules/using-15_b.C
> > @@ -0,0 +1,5 @@
> > +// { dg-additional-options "-fmodules-ts" }
> > +// { dg-module-cmi M }
> > +
> > +export module M;
> > +export import :a;
> > diff --git a/gcc/testsuite/g++.dg/modules/using-15_c.C b/gcc/testsuite/g++.dg/modules/using-15_c.C
> > new file mode 100644
> > index 00000000000..0651efffc91
> > --- /dev/null
> > +++ b/gcc/testsuite/g++.dg/modules/using-15_c.C
> > @@ -0,0 +1,7 @@
> > +// { dg-additional-options "-fmodules-ts" }
> > +import M;
> > +
> > +int main() {
> > +  bar::a();
> > +  foo::a();  // { dg-error "not been declared" }
> > +}
> 

  reply	other threads:[~2024-04-13 15:40 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-12  0:38 [PATCH 0/3] c++/modules: Fix some small issues with exported using-decls Nathaniel Shead
2024-04-12  0:40 ` [PATCH 1/3] c++/modules: Only emit exported GMF usings [PR114600] Nathaniel Shead
2024-04-12 17:47   ` Jason Merrill
2024-04-12  0:40 ` [PATCH 2/3] c++/modules: Propagate using decls from partitions Nathaniel Shead
2024-04-12 17:50   ` Jason Merrill
2024-04-13 15:40     ` Nathaniel Shead [this message]
2024-04-30  7:59       ` Nathaniel Shead
2024-04-30 18:16         ` Jason Merrill
2024-04-12  0:41 ` [PATCH 3/3] c++/modules: Propagate hidden flag on " Nathaniel Shead
2024-04-12 17:53   ` Jason Merrill

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=661aa767.170a0220.a291e.1721@mx.google.com \
    --to=nathanieloshead@gmail.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=jason@redhat.com \
    --cc=nathan@acm.org \
    --cc=ppalka@redhat.com \
    /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).