From 3a322efd85d2697724a6e759c9a53f14a3aac6b6 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Wed, 2 Jan 2013 15:54:42 -0500 Subject: [PATCH] re PR c++/54325 (C++11 uniform initialization syntax for argument-less abstract base class constructor fails) PR c++/54325 * call.c (build_new_method_call_1): Don't use build_value_init for user-provided default constructors. From-SVN: r194820 --- gcc/cp/ChangeLog | 4 ++++ gcc/cp/call.c | 3 +++ .../g++.dg/cpp0x/initlist-protected.C | 23 +++++++++++++++++++ 3 files changed, 30 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp0x/initlist-protected.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index fe0bfe2da08..f2148f72667 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2013-01-02 Jason Merrill + PR c++/54325 + * call.c (build_new_method_call_1): Don't use build_value_init for + user-provided default constructors. + * decl.c (check_default_argument): Use LOOKUP_IMPLICIT. PR c++/55032 diff --git a/gcc/cp/call.c b/gcc/cp/call.c index bba5d9fdba5..ad39637c8b7 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -7534,6 +7534,9 @@ build_new_method_call_1 (tree instance, tree fns, vec **args, build_special_member_call. */ if (CONSTRUCTOR_NELTS (init_list) == 0 && TYPE_HAS_DEFAULT_CONSTRUCTOR (basetype) + /* For a user-provided default constructor, use the normal + mechanisms so that protected access works. */ + && !type_has_user_provided_default_constructor (basetype) && !processing_template_decl) init = build_value_init (basetype, complain); diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist-protected.C b/gcc/testsuite/g++.dg/cpp0x/initlist-protected.C new file mode 100644 index 00000000000..fb5cc6aa892 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/initlist-protected.C @@ -0,0 +1,23 @@ +// PR c++/54325 +// { dg-options -std=c++11 } + +class base +{ + protected: + base() + {} +}; + +class derived : public base +{ + public: + derived() + : base{} // <-- Note the c++11 curly brace syntax + {} +}; + +int main() +{ + derived d1; + return 0; +} -- 2.30.2