aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2023-05-04 18:37:19 -0400
committerJason Merrill <jason@redhat.com>2023-05-04 21:07:19 -0400
commit6f18f344338b370031e75924eed2bdd1ce5c8dba (patch)
treef56562cbd6375f6d6ed5e263074ab32827cb0c65
parentfde093b76457714358a2275b42af567749db22d7 (diff)
downloadgcc-6f18f344338b370031e75924eed2bdd1ce5c8dba.zip
gcc-6f18f344338b370031e75924eed2bdd1ce5c8dba.tar.gz
gcc-6f18f344338b370031e75924eed2bdd1ce5c8dba.tar.bz2
Revert "c++: restore instantiate_decl assert"
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.
-rw-r--r--gcc/cp/pt.cc6
-rw-r--r--gcc/testsuite/g++.dg/template/local10.C10
2 files changed, 10 insertions, 6 deletions
diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc
index 5446b50..0f4fb25 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 0000000..9a70b84
--- /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); }