diff options
Diffstat (limited to 'gcc/cp/init.c')
-rw-r--r-- | gcc/cp/init.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 2418a9d..5eba4c3 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -1117,7 +1117,7 @@ emit_mem_initializers (tree mem_inits) } if (DECL_DEFAULTED_FN (current_function_decl) - && ! DECL_INHERITED_CTOR_BASE (current_function_decl)) + && ! DECL_INHERITED_CTOR (current_function_decl)) flags |= LOOKUP_DEFAULTED; /* Sort the mem-initializers into the order in which the @@ -1138,6 +1138,13 @@ emit_mem_initializers (tree mem_inits) if (arguments == error_mark_node) continue; + /* Suppress access control when calling the inherited ctor. */ + bool inherited_base = (DECL_INHERITED_CTOR (current_function_decl) + && flag_new_inheriting_ctors + && arguments); + if (inherited_base) + push_deferring_access_checks (dk_deferred); + if (arguments == NULL_TREE) { /* If these initializations are taking place in a copy constructor, @@ -1172,6 +1179,9 @@ emit_mem_initializers (tree mem_inits) /* C++14 DR1658 Means we do not have to construct vbases of abstract classes. */ construct_virtual_base (subobject, arguments); + + if (inherited_base) + pop_deferring_access_checks (); } in_base_initializer = 0; |