diff options
author | Jason Merrill <jason@redhat.com> | 2020-01-10 13:46:57 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2020-01-10 13:46:57 -0500 |
commit | 640b23d7ff5f3fad005dcbfb04a36e27000fc150 (patch) | |
tree | 61f43978030d8d42b472bfc871aed800deaa0e66 /gcc/testsuite | |
parent | 9b0700571fe390afcca32dcb3b2122640e628c95 (diff) | |
download | gcc-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.C | 13 |
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}; } |