From af9fc1dd6364fac542ca47b6ddd68866f5aefb50 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 21 Aug 2007 19:03:23 +0200 Subject: [PATCH] init.c (build_new_1): Use get_target_expr instead of save_expr. * init.c (build_new_1): Use get_target_expr instead of save_expr. * g++.dg/init/new24.C: New test. From-SVN: r127668 --- 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 f6ddb5e3a32..e21bb0f0907 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 19093194ad6..ce33e42a4cb 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 74321c891d7..4fc50cef9f0 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 00000000000..6f5613be7f6 --- /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.30.2