In C++11 a trivial [cd]tor might not be callable.
authorJason Merrill <jason@redhat.com>
Wed, 23 Oct 2013 18:08:56 +0000 (14:08 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Wed, 23 Oct 2013 18:08:56 +0000 (14:08 -0400)
commiteca7fc5755041ad90a7db18bbd6b3294f5075da7
tree42c2ea99646dafa555892877e4e1670084770361
parentd4c579b56109284162f084bf031cd4eea1f1b036
In C++11 a trivial [cd]tor might not be callable.

* class.c (user_provided_p): A function deleted on its declation
in the class is not user-provided.
(type_build_ctor_call): Also force a ctor call if we
might have a deleted or private trivial ctor.
(type_build_dtor_call): New.
(deduce_noexcept_on_destructors): Remove obsolete code.
* cp-tree.h: Declare type_build_dtor_call.
* decl.c (expand_static_init): Make sure trivial dtors are callable.
(cxx_maybe_build_cleanup): Likewise.
* except.c (build_throw): Likewise.
* init.c (build_value_init): Handle trivial but not callable ctors.
(perform_target_ctor): Make sure trivial dtor is callable.
(perform_member_init): Likewise.
(expand_cleanup_for_base): Likewise.
(build_vec_delete_1): Likewise.
(build_delete): Likewise.
(push_base_cleanups): Likewise.
(build_new_1): Avoid redundant error.
* method.c (synthesized_method_walk): Can't ever exit early in C++11.
Always process the subobject destructor.
* semantics.c (finish_compound_literal): Make sure trivial dtor is
callable.
* typeck2.c (split_nonconstant_init): Likewise.

From-SVN: r203985
24 files changed:
gcc/cp/ChangeLog
gcc/cp/call.c
gcc/cp/class.c
gcc/cp/cp-tree.h
gcc/cp/decl.c
gcc/cp/except.c
gcc/cp/init.c
gcc/cp/method.c
gcc/cp/semantics.c
gcc/cp/typeck2.c
gcc/testsuite/g++.dg/cpp0x/defaulted19.C
gcc/testsuite/g++.dg/cpp0x/defaulted19a.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/defaulted2.C
gcc/testsuite/g++.dg/cpp0x/defaulted46.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/implicit11.C
gcc/testsuite/g++.dg/cpp0x/sfinae21.C
gcc/testsuite/g++.dg/ext/anon-struct4.C
gcc/testsuite/g++.dg/init/ctor8.C
gcc/testsuite/g++.dg/init/pr25811.C
gcc/testsuite/g++.dg/init/pr29043.C
gcc/testsuite/g++.dg/init/pr43719.C
gcc/testsuite/g++.dg/init/pr44086.C
gcc/testsuite/g++.dg/init/ref14.C
gcc/testsuite/g++.dg/init/uninitialized1.C