]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Revert "c++: DMI in template with virtual base [PR106890]"
authorJason Merrill <jason@redhat.com>
Thu, 4 May 2023 14:26:25 +0000 (10:26 -0400)
committerJason Merrill <jason@redhat.com>
Thu, 4 May 2023 14:48:03 +0000 (10:48 -0400)
The PR106890 patch caused PR109666; for 12.3 let's just revert it.

PR c++/109666

This reverts commit 94569d91bd4c604da755b4aae84256e7fe21196a.

gcc/cp/init.cc
gcc/testsuite/g++.dg/cpp0x/nsdmi-template25.C [deleted file]

index 92969857ea8882ec096fad869dc87a1279251a4f..75dbfe112b58f8ea47a7244b766eff0e76b9bf87 100644 (file)
@@ -613,18 +613,6 @@ maybe_instantiate_nsdmi_init (tree member, tsubst_flags_t complain)
              pushed = true;
            }
 
-         /* If we didn't push_to_top_level, still step out of constructor
-            scope so build_base_path doesn't try to use its __in_chrg.  */
-         tree cfd = current_function_decl;
-         auto cbl = current_binding_level;
-         if (at_function_scope_p ())
-           {
-             current_function_decl
-               = decl_function_context (current_function_decl);
-             while (current_binding_level->kind != sk_class)
-               current_binding_level = current_binding_level->level_chain;
-           }
-
          inject_this_parameter (ctx, TYPE_UNQUALIFIED);
 
          start_lambda_scope (member);
@@ -643,8 +631,6 @@ maybe_instantiate_nsdmi_init (tree member, tsubst_flags_t complain)
          if (init != error_mark_node)
            hash_map_safe_put<hm_ggc> (nsdmi_inst, member, init);
 
-         current_function_decl = cfd;
-         current_binding_level = cbl;
          if (pushed)
            {
              pop_deferring_access_checks ();
diff --git a/gcc/testsuite/g++.dg/cpp0x/nsdmi-template25.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi-template25.C
deleted file mode 100644 (file)
index 368e745..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-// PR c++/106890
-// { dg-do compile { target c++11 } }
-
-struct A
-{
-  int p;
-};
-
-template<typename T>
-struct B : virtual public A
-{
-  B() { }
-  B(int) { }
-
-  int k = this->p;
-};
-
-template struct B<int>;