]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/58639 (ICE on self-referential struct member)
authorJason Merrill <jason@redhat.com>
Tue, 28 Jan 2014 13:40:06 +0000 (08:40 -0500)
committerJason Merrill <jason@gcc.gnu.org>
Tue, 28 Jan 2014 13:40:06 +0000 (08:40 -0500)
PR c++/58639
* call.c (build_aggr_conv): Reject value-initialization of reference.

From-SVN: r207183

gcc/cp/ChangeLog
gcc/cp/call.c
gcc/testsuite/g++.dg/cpp0x/initlist78.C [new file with mode: 0644]

index 61bb61d2d0ad9bd59567a6e9cb4b5293fb273a06..00d18f23387c9f248ad75d3645e24d90295aae6c 100644 (file)
@@ -1,3 +1,8 @@
+2014-01-27  Jason Merrill  <jason@redhat.com>
+
+       PR c++/58639
+       * call.c (build_aggr_conv): Reject value-initialization of reference.
+
 2013-10-25  Tom de Vries  <tom@codesourcery.com>
 
        PR c++/58282
index f49851df4ea1264981846c68175b1e2e4134c519..d655983bbc3d3ea36e663af0b06ca38d1bcb9dbb 100644 (file)
@@ -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 (file)
index 0000000..648ec53
--- /dev/null
@@ -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 "" }