aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2020-01-10 13:46:57 -0500
committerJason Merrill <jason@gcc.gnu.org>2020-01-10 13:46:57 -0500
commit640b23d7ff5f3fad005dcbfb04a36e27000fc150 (patch)
tree61f43978030d8d42b472bfc871aed800deaa0e66 /gcc/testsuite
parent9b0700571fe390afcca32dcb3b2122640e628c95 (diff)
downloadgcc-640b23d7ff5f3fad005dcbfb04a36e27000fc150.zip
gcc-640b23d7ff5f3fad005dcbfb04a36e27000fc150.tar.gz
gcc-640b23d7ff5f3fad005dcbfb04a36e27000fc150.tar.bz2
PR c++/93173 - incorrect tree sharing.
My patch for 93033 wasn't sufficient to handle all the possible sharing introduced by split_nonconstant_init, and it occurred to me that it would make sense to use the same unsharing technique as unshare_body, namely copy_if_shared. PR c++/93033 gcc/ * gimplify.c (copy_if_shared): No longer static. * gimplify.h: Declare it. gcc/cp/ * cp-gimplify.c (cp_gimplify_init_expr, cp_gimplify_expr): Use copy_if_shared after cp_genericize_tree. * typeck2.c (split_nonconstant_init): Don't unshare here. From-SVN: r280126
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist-new3.C13
1 files changed, 13 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist-new3.C b/gcc/testsuite/g++.dg/cpp0x/initlist-new3.C
new file mode 100644
index 0000000..04a8f5c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist-new3.C
@@ -0,0 +1,13 @@
+// PR c++/93173
+// { dg-do compile { target c++11 } }
+
+template<typename> struct S1 {
+ S1(S1 &);
+ ~S1();
+};
+struct S2 {
+ S1<void> x;
+ int y;
+ int z;
+};
+void f(S1<void> x, int y, int z) { new S2{x, y, z}; }