From: Jason Merrill Date: Tue, 28 Jan 2014 13:40:06 +0000 (-0500) Subject: re PR c++/58639 (ICE on self-referential struct member) X-Git-Tag: releases/gcc-4.7.4~282 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8e45c9da33208752e8c6460497e30f4dfd372099;p=thirdparty%2Fgcc.git re PR c++/58639 (ICE on self-referential struct member) PR c++/58639 * call.c (build_aggr_conv): Reject value-initialization of reference. From-SVN: r207183 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 61bb61d2d0ad..00d18f23387c 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2014-01-27 Jason Merrill + + PR c++/58639 + * call.c (build_aggr_conv): Reject value-initialization of reference. + 2013-10-25 Tom de Vries PR c++/58282 diff --git a/gcc/cp/call.c b/gcc/cp/call.c index f49851df4ea1..d655983bbc3d 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -894,6 +894,9 @@ build_aggr_conv (tree type, tree ctor, int flags) if (i < CONSTRUCTOR_NELTS (ctor)) val = CONSTRUCTOR_ELT (ctor, i)->value; + else if (TREE_CODE (ftype) == REFERENCE_TYPE) + /* Value-initialization of reference is ill-formed. */ + return NULL; else { if (empty_ctor == NULL_TREE) diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist78.C b/gcc/testsuite/g++.dg/cpp0x/initlist78.C new file mode 100644 index 000000000000..648ec5307df1 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/initlist78.C @@ -0,0 +1,12 @@ +// PR c++/58639 +// { dg-require-effective-target c++11 } + +struct node { + node &parent; +}; + +struct vector { + node n; +}; + +vector v({}); // { dg-error "" }