public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [pushed] c++: restore instantiate_decl assert
@ 2023-04-27  1:45 Jason Merrill
  2023-05-05  1:07 ` [pushed] Revert "c++: restore instantiate_decl assert" Jason Merrill
  0 siblings, 1 reply; 2+ messages in thread
From: Jason Merrill @ 2023-04-27  1:45 UTC (permalink / raw)
  To: gcc-patches

Tested x86_64-pc-linux-gnu, applying to trunk.

-- 8< --

For PR61445 I removed this assert, but PR108242 demonstrated why it's still
useful; to avoid regressing the former testcase I check pattern_defined
in the assert.

This reverts r212524.

	PR c++/61445

gcc/cp/ChangeLog:

	* pt.cc (instantiate_decl): Assert !defer_ok for local
	class members.
---
 gcc/cp/pt.cc | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc
index 93a055c66a1..6df16fef0dd 100644
--- a/gcc/cp/pt.cc
+++ b/gcc/cp/pt.cc
@@ -27090,6 +27090,12 @@ instantiate_decl (tree d, bool defer_ok, bool expl_inst_class_mem_p)
 	pattern_defined = ! DECL_EXTERNAL (code_pattern);
     }
 
+  /* Any local class members should be instantiated from the TAG_DEFN
+     with defer_ok == 0.  */
+  gcc_checking_assert (!defer_ok || !pattern_defined
+		       || !decl_function_context (d)
+		       || LAMBDA_TYPE_P (DECL_CONTEXT (d)));
+
   /* We may be in the middle of deferred access check.  Disable it now.  */
   push_deferring_access_checks (dk_no_deferred);
 

base-commit: 9b40ca2569d71e54d7dbbdbfd00d733770576f6f
-- 
2.31.1


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

* [pushed] Revert "c++: restore instantiate_decl assert"
  2023-04-27  1:45 [pushed] c++: restore instantiate_decl assert Jason Merrill
@ 2023-05-05  1:07 ` Jason Merrill
  0 siblings, 0 replies; 2+ messages in thread
From: Jason Merrill @ 2023-05-05  1:07 UTC (permalink / raw)
  To: gcc-patches

Tested x86_64-pc-linux-gnu, applying to trunk.

-- 8< --

In the testcase the assert fails because we use one member function from
another while we're in the middle of instantiating them all, which is
perfectly fine.  It seems complicated to detect this situation, so let's
remove the assert again.

	PR c++/109658

This reverts commit 95d4c0d2e6318aef88ba0bc607dfc1ec6b7a612f.

gcc/testsuite/ChangeLog:

	* g++.dg/template/local10.C: New test.
---
 gcc/cp/pt.cc                            |  6 ------
 gcc/testsuite/g++.dg/template/local10.C | 10 ++++++++++
 2 files changed, 10 insertions(+), 6 deletions(-)
 create mode 100644 gcc/testsuite/g++.dg/template/local10.C

diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc
index 5446b5058b7..0f4fb258f9e 100644
--- a/gcc/cp/pt.cc
+++ b/gcc/cp/pt.cc
@@ -27061,12 +27061,6 @@ instantiate_decl (tree d, bool defer_ok, bool expl_inst_class_mem_p)
 	pattern_defined = ! DECL_EXTERNAL (code_pattern);
     }
 
-  /* Any local class members should be instantiated from the TAG_DEFN
-     with defer_ok == 0.  */
-  gcc_checking_assert (!defer_ok || !pattern_defined
-		       || !decl_function_context (d)
-		       || LAMBDA_TYPE_P (DECL_CONTEXT (d)));
-
   /* We may be in the middle of deferred access check.  Disable it now.  */
   push_deferring_access_checks (dk_no_deferred);
 
diff --git a/gcc/testsuite/g++.dg/template/local10.C b/gcc/testsuite/g++.dg/template/local10.C
new file mode 100644
index 00000000000..9a70b846ff3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/local10.C
@@ -0,0 +1,10 @@
+// PR c++/109658
+
+template <typename OutputStream> void encode(OutputStream, int *) {
+  struct ValueBaseVisitor {
+    void visit() { encodeString(); }
+    void encodeString() {}
+  };
+}
+int encode_json;
+void encode_out() { encode(encode_out, &encode_json); }

base-commit: 4657977541de1056a1cb651d6e2ba22472f62d04
-- 
2.31.1


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

end of thread, other threads:[~2023-05-05  1:07 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-04-27  1:45 [pushed] c++: restore instantiate_decl assert Jason Merrill
2023-05-05  1:07 ` [pushed] Revert "c++: restore instantiate_decl assert" 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).