On 5/24/24 11:20, Nathaniel Shead wrote:
This is just a small improvement to a diagnostic.  I thought about also
adding an inform to suggest something like "standard library headers
should be included in the GMF" or somesuch, but I'm not sure that'll be
especially valuable and may be confusing if this particular error is
caused some other way.

Bootstrapped and regtested (so far just modules.exp) on
x86_64-pc-linux-gnu, OK for trunk if full regtest succeeds?

-- >8 --

If a user mistakenly includes a standard library header within the
module purview, they currently get a confusing "declaration conflicts
with builtin" error.  This patch updates the message to include "in
module", to help guide the user towards the likely cause.

gcc/cp/ChangeLog:

        * module.cc (module_may_redeclare): Update error message.

gcc/testsuite/ChangeLog:

        * g++.dg/modules/enum-12.C: Test for updated error.

Signed-off-by: Nathaniel Shead <nathanielosh...@gmail.com>
---
  gcc/cp/module.cc                       | 9 ++++++++-
  gcc/testsuite/g++.dg/modules/enum-12.C | 2 +-
  2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc
index 6cd7d9e0b93..60cf3ebc468 100644
--- a/gcc/cp/module.cc
+++ b/gcc/cp/module.cc
@@ -19140,7 +19140,14 @@ module_may_redeclare (tree olddecl, tree newdecl)
    decl = newdecl ? newdecl : olddecl;
    location_t loc = newdecl ? DECL_SOURCE_LOCATION (newdecl) : input_location;
    if (DECL_IS_UNDECLARED_BUILTIN (olddecl))
-    error_at (loc, "declaration %qD conflicts with builtin", decl);
+    {
+      if (newdecl_attached_p)
+       error_at (loc, "declaring %qD in module %qs conflicts with builtin",

Maybe "with builtin in global module"?

+                 decl, new_mod->get_flatname ());
+      else
+       error_at (loc, "declaring %qD in global module conflicts with builtin",

I'm not sure mentioning the global module adds anything in this case?

Jason

Reply via email to