From a33ad58be16a5288cb2874aded7b83b163a829b4 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Wed, 28 May 2014 11:55:03 -0400 Subject: [PATCH] =?utf8?q?re=20PR=20c++/61242=20(Bogus=20"no=20matching=20?= =?utf8?q?function=20for=20call=20to=20=E2=80=98Foo::Create()")?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit PR c++/61242 * call.c (build_aggr_conv): Ignore passed in flags. (build_array_conv, build_complex_conv): Likewise. From-SVN: r211024 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/call.c | 8 +++++++- gcc/testsuite/g++.dg/cpp0x/initlist84.C | 17 +++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/initlist84.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 2e9463cc213..2b7f32fc2ea 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2014-05-28 Jason Merrill + + PR c++/61242 + * call.c (build_aggr_conv): Ignore passed in flags. + (build_array_conv, build_complex_conv): Likewise. + 2014-05-23 Jan Hubicka * optimize.c (maybe_thunk_body): Use set_comdat_group. diff --git a/gcc/cp/call.c b/gcc/cp/call.c index 20af0e343a1..77aa8caf678 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -890,7 +890,9 @@ build_aggr_conv (tree type, tree ctor, int flags, tsubst_flags_t complain) if (ctor == error_mark_node) return NULL; - flags |= LOOKUP_NO_NARROWING; + /* The conversions within the init-list aren't affected by the enclosing + context; they're always simple copy-initialization. */ + flags = LOOKUP_IMPLICIT|LOOKUP_NO_NARROWING; for (; field; field = next_initializable_field (DECL_CHAIN (field))) { @@ -963,6 +965,8 @@ build_array_conv (tree type, tree ctor, int flags, tsubst_flags_t complain) return NULL; } + flags = LOOKUP_IMPLICIT|LOOKUP_NO_NARROWING; + FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val) { conversion *sub @@ -1007,6 +1011,8 @@ build_complex_conv (tree type, tree ctor, int flags, if (len != 2) return NULL; + flags = LOOKUP_IMPLICIT|LOOKUP_NO_NARROWING; + FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val) { conversion *sub diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist84.C b/gcc/testsuite/g++.dg/cpp0x/initlist84.C new file mode 100644 index 00000000000..4d46746c52f --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/initlist84.C @@ -0,0 +1,17 @@ +// PR c++/61242 +// { dg-do compile { target c++11 } } + +struct Foo +{ + struct A + { + const int &container; + const int &args; + }; + static void Create (const A &); +}; + +int main () +{ + Foo::Create ({{}, {}}); +} -- 2.30.2