From 51020624b05252b773c1e5df261cd37446c5aded Mon Sep 17 00:00:00 2001 From: jakub Date: Tue, 21 Aug 2007 17:03:23 +0000 Subject: [PATCH] * init.c (build_new_1): Use get_target_expr instead of save_expr. * g++.dg/init/new24.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@127668 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 4 ++++ gcc/cp/init.c | 2 +- gcc/testsuite/ChangeLog | 2 ++ gcc/testsuite/g++.dg/init/new24.C | 18 ++++++++++++++++++ 4 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/init/new24.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f6ddb5e..e21bb0f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,7 @@ +2007-08-21 Jakub Jelinek + + * init.c (build_new_1): Use get_target_expr instead of save_expr. + 2007-08-20 Pawel Sikora PR c++/7302 diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 1909319..ce33e42 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -1755,7 +1755,7 @@ build_new_1 (tree placement, tree type, tree nelts, tree init, placement_expr = NULL_TREE; else { - placement_expr = save_expr (TREE_VALUE (placement)); + placement_expr = get_target_expr (TREE_VALUE (placement)); placement = tree_cons (NULL_TREE, placement_expr, NULL_TREE); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 74321c8..4fc50ce 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,7 @@ 2007-08-21 Jakub Jelinek + * g++.dg/init/new24.C: New test. + PR middle-end/32912 * gcc.dg/pr32912-1.c: New test. * gcc.dg/pr32912-2.c: New test. diff --git a/gcc/testsuite/g++.dg/init/new24.C b/gcc/testsuite/g++.dg/init/new24.C new file mode 100644 index 0000000..6f5613b --- /dev/null +++ b/gcc/testsuite/g++.dg/init/new24.C @@ -0,0 +1,18 @@ +// PR c++/33025 +// { dg-do compile } +// { dg-options "-O2" } + +typedef __SIZE_TYPE__ size_t; +inline void *operator new (size_t, void *p) throw () { return p; } +extern "C" void abort (); + +int +main() +{ + const unsigned num = 10; + unsigned *data = new unsigned[num]; + unsigned *ptr = new (data) unsigned (num); + static unsigned data2[10]; + unsigned *ptr2 = new (&data2[0]) unsigned (10); + return 0; +} -- 2.7.4