From 3e24efbcd9e43e23f3fbc87d94e3e6762a39282a Mon Sep 17 00:00:00 2001 From: jason Date: Mon, 14 Jul 2014 05:25:13 +0000 Subject: [PATCH] PR c++/58636 * call.c (build_list_conv): Don't try to build a list of references. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@212503 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/call.c | 6 ++++++ gcc/testsuite/g++.dg/cpp0x/initlist-array4.C | 9 +++++++++ 3 files changed, 20 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp0x/initlist-array4.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index e873d992cef7..bdad6d90ddfc 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2014-07-13 Jason Merrill + + PR c++/58636 + * call.c (build_list_conv): Don't try to build a list of references. + 2014-07-13 Edward Smith-Rowland <3dw4rd@verizon.net> PR C++/60209 - Declaration of user-defined literal operator cause error diff --git a/gcc/cp/call.c b/gcc/cp/call.c index 4ca6be5bd008..b16c6e421674 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -806,6 +806,12 @@ build_list_conv (tree type, tree ctor, int flags, tsubst_flags_t complain) /* But no narrowing conversions. */ flags |= LOOKUP_NO_NARROWING; + /* Can't make an array of these types. */ + if (TREE_CODE (elttype) == REFERENCE_TYPE + || TREE_CODE (elttype) == FUNCTION_TYPE + || VOID_TYPE_P (elttype)) + return NULL; + FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val) { conversion *sub diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist-array4.C b/gcc/testsuite/g++.dg/cpp0x/initlist-array4.C new file mode 100644 index 000000000000..af2045d9bbe1 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/initlist-array4.C @@ -0,0 +1,9 @@ +// PR c++/58636 +// { dg-do compile { target c++11 } } + +#include + +// { dg-error "pointer to reference" "" { target *-*-* } 0 } +int foo(std::initializer_list); + +int i = foo({ 0 }); // { dg-error "std::initializer_list" } -- 2.47.2