public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] c++: Diagnose a deduction guide in a wrong scope [PR91759]
@ 2020-03-17  8:49 Jakub Jelinek
  2020-03-17 19:54 ` Jason Merrill
  0 siblings, 1 reply; 4+ messages in thread
From: Jakub Jelinek @ 2020-03-17  8:49 UTC (permalink / raw)
  To: Jason Merrill; +Cc: gcc-patches

Hi!

The following testcase is accepts-invalid since r7-6608-ga56c0ac08242269b.
Before that change we had this
"deduction guide %qD must be declared in the same scope as %qT"
diagnostics for it, after the change it is expected to be diagnosed
in set_decl_namespace at the not_found: label in there.  On this testcase
nothing is diagnosed though, because set_decl_namespace isn't called at all,
as in_namespace is NULL.

The following patch restores the old warning but does it only in case we
don't call set_decl_namespace.

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
Or do you prefer something different?

2020-03-17  Jakub Jelinek  <jakub@redhat.com>

	PR c++/91759
	* decl.c (grokfndecl): Restore old diagnostics about deduction
	guide declared in different scope if in_namespace is NULL_TREE.

	* g++.dg/cpp1z/class-deduction72.C: New test.

--- gcc/cp/decl.c.jj	2020-03-12 08:26:23.000000000 +0100
+++ gcc/cp/decl.c	2020-03-16 16:25:02.142867924 +0100
@@ -9644,6 +9644,15 @@ grokfndecl (tree ctype,
 		    "namespace scope", decl);
 	  return NULL_TREE;
 	}
+      tree type = TREE_TYPE (DECL_NAME (decl));
+      if (in_namespace == NULL_TREE
+	  && CP_DECL_CONTEXT (decl) != CP_TYPE_CONTEXT (type))
+	{
+	  error_at (location, "deduction guide %qD must be declared in the "
+			      "same scope as %qT", decl, type);
+	  inform (location_of (type), "  declared here");
+	  return NULL_TREE;
+	}
       if (funcdef_flag)
 	error_at (location,
 		  "deduction guide %qD must not have a function body", decl);
--- gcc/testsuite/g++.dg/cpp1z/class-deduction72.C.jj	2020-03-16 16:27:03.997068510 +0100
+++ gcc/testsuite/g++.dg/cpp1z/class-deduction72.C	2020-03-16 16:28:21.241927835 +0100
@@ -0,0 +1,11 @@
+// PR c++/91759
+// { dg-do compile { target c++17 } }
+
+namespace N {
+  template <typename T>
+  struct X{ X(int); };	// { dg-message "declared here" }
+}
+
+using N::X;
+
+X(int) -> X<int>;	// { dg-error "must be declared in the same scope as" }

	Jakub


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2020-03-17 21:36 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-17  8:49 [PATCH] c++: Diagnose a deduction guide in a wrong scope [PR91759] Jakub Jelinek
2020-03-17 19:54 ` Jason Merrill
2020-03-17 21:06   ` Jakub Jelinek
2020-03-17 21:36     ` Jason Merrill

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