From: jason Date: Wed, 2 Jun 2010 03:55:28 +0000 (+0000) Subject: PR c++/44358 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7f24d2b07fff0aaa525dbb70d732a929754f9bba;p=thirdparty%2Fgcc.git PR c++/44358 * call.c (build_list_conv): Set list-initialization flags properly. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@160131 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 594431300d48..1cb2baf84d7e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2010-06-01 Jason Merrill + + PR c++/44358 + * call.c (build_list_conv): Set list-initialization flags properly. + 2010-06-01 Nathan Froyd * typeck2.c (build_x_arrow): Make types_memoized a VEC. diff --git a/gcc/cp/call.c b/gcc/cp/call.c index 64e2e5027876..40627025ae7a 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -589,6 +589,12 @@ build_list_conv (tree type, tree ctor, int flags) unsigned i; tree val; + /* Within a list-initialization we can have more user-defined + conversions. */ + flags &= ~LOOKUP_NO_CONVERSION; + /* But no narrowing conversions. */ + flags |= LOOKUP_NO_NARROWING; + FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val) { conversion *sub diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index cd4fdc359fc3..3bdfeff37bcf 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-06-01 Jason Merrill + + PR c++/44358 + * g++.dg/cpp0x/initlist36.C: New. + 2010-05-31 Jan Hubicka * testsuite/gcc.dg/noreturn-8.c: New testcase. diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist36.C b/gcc/testsuite/g++.dg/cpp0x/initlist36.C new file mode 100644 index 000000000000..a3305e11f2d2 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/initlist36.C @@ -0,0 +1,21 @@ +// PR c++/44358 +// { dg-options "-std=c++0x" } + +#include + +struct A +{ + A(int); +}; + +struct B +{ + B(std::initializer_list); +}; + +void f (B b); +int main() +{ + B b0 = {{1}}; + B b1 = {{1.0}}; // { dg-error "narrowing" } +}