Implement P0136R1, Rewording inheriting constructors.
authorJason Merrill <jason@redhat.com>
Wed, 2 Nov 2016 01:50:29 +0000 (21:50 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Wed, 2 Nov 2016 01:50:29 +0000 (21:50 -0400)
commit31f7f784fe7fa68bca218df43ec8965569d6cb5d
tree1dffc88ff5b0ae93ef01f8ea3bba2713ee747362
parentbe9f7afb32b8cf2dfb6d08f86804b6eabd30c838
Implement P0136R1, Rewording inheriting constructors.

gcc/c-family/
* c.opt (-fnew-inheriting-ctors): New.
* c-opts.c: Default to on for ABI 11+.
gcc/cp/
* call.c (enum rejection_reason_code): Add rr_inherited_ctor.
(inherited_ctor_rejection): New.
(add_function_candidate): Reject inherited ctors for copying.
(enforce_access): Use strip_inheriting_ctors.
(print_z_candidate): Likewise.  Handle rr_inherited_ctor.
(convert_like_real): Avoid copying inheriting ctor parameters.
(build_over_call): Likewise.  A base ctor inheriting from vbase
has no parms.  Sorry about varargs.
(joust): A local constructor beats inherited with the same convs.
* class.c (add_method): Handle hiding inheriting ctors.
(one_inherited_ctor): Handle new semantics.
(add_implicitly_declared_members): Pass using_decl down.
(build_clone): A base ctor inheriting from vbase has no parms.
* cp-tree.h (DECL_INHERITED_CTOR): Store this instead of the base.
(SET_DECL_INHERITED_CTOR): Likewise.
(DECL_INHERITED_CTOR_BASE): Adjust.
* constexpr.c: Adjust.
* error.c (dump_function_decl): Decorate inheriting ctors.
* init.c (emit_mem_initializers): Suppress access control in
inheriting ctor.
* mangle.c (write_special_name_constructor): Handle new inheriting
ctor mangling.
* method.c (strip_inheriting_ctors, inherited_ctor_binfo)
(ctor_omit_inherited_parms, binfo_inherited_from): New.
(synthesized_method_walk): Use binfo_inherited_from.  Suppress
access control in inheriting ctor.
(deduce_inheriting_ctor): Deleted if ambiguous ctor inheritance.
(maybe_explain_implicit_delete): Explain ambigous ctor inheritance.
(add_one_base_init, do_build_copy_constructor): Adjust.
(locate_fn_flags, explain_implicit_non_constexpr): Adjust.
(implicitly_declare_fn): Adjust.
(get_inherited_ctor): Remove.
* name-lookup.c (do_class_using_decl): Check for indirect ctor
inheritance.
* optimize.c (cdtor_comdat_group): Adjust for new mangling.
(maybe_clone_body): Handle omitted parms in base clone.
(maybe_thunk_body): Don't thunk if base clone omits parms.
* pt.c (tsubst_decl): Adjust.
(instantiate_template_1): Suppress access control in inheriting
ctor.
(fn_type_unification): Do deduction with inherited ctor.
* tree.c (special_function_p): Adjust.
gcc/
* tree-inline.c (copy_tree_body_r): Only copy the taken branch of
a COND_EXPR with constant condition.
libiberty/
* cp-demangle.c (d_ctor_dtor_name): Handle inheriting constructor.

From-SVN: r241765
49 files changed:
gcc/ChangeLog
gcc/c-family/ChangeLog
gcc/c-family/c-opts.c
gcc/c-family/c.opt
gcc/common.opt
gcc/cp/ChangeLog
gcc/cp/call.c
gcc/cp/class.c
gcc/cp/constexpr.c
gcc/cp/cp-tree.h
gcc/cp/error.c
gcc/cp/init.c
gcc/cp/mangle.c
gcc/cp/method.c
gcc/cp/name-lookup.c
gcc/cp/optimize.c
gcc/cp/pt.c
gcc/cp/tree.c
gcc/doc/invoke.texi
gcc/testsuite/g++.dg/cpp0x/constexpr-inhctor1.C
gcc/testsuite/g++.dg/cpp0x/inh-ctor11.C
gcc/testsuite/g++.dg/cpp0x/inh-ctor11a.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/inh-ctor15.C
gcc/testsuite/g++.dg/cpp0x/inh-ctor15a.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/inh-ctor3.C
gcc/testsuite/g++.dg/cpp0x/inh-ctor3a.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/inh-ctor5.C
gcc/testsuite/g++.dg/cpp0x/inh-ctor9.C
gcc/testsuite/g++.dg/cpp1z/inh-ctor1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp1z/inh-ctor22.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp1z/inh-ctor23.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp1z/inh-ctor24.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp1z/inh-ctor25.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp1z/inh-ctor26.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp1z/inh-ctor27.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp1z/inh-ctor28.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp1z/inh-ctor29.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp1z/inh-ctor30.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp1z/inh-ctor31.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp1z/inh-ctor32.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp1z/inh-ctor33.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp1z/inh-ctor34.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp1z/inh-ctor35.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp1z/inh-ctor35a.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp1z/using1.C [new file with mode: 0644]
gcc/tree-inline.c
libiberty/ChangeLog
libiberty/cp-demangle.c
libiberty/testsuite/demangle-expected