init.c (build_new_1): Use get_target_expr instead of save_expr.
authorJakub Jelinek <jakub@redhat.com>
Tue, 21 Aug 2007 17:03:23 +0000 (19:03 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 21 Aug 2007 17:03:23 +0000 (19:03 +0200)
* 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
gcc/cp/init.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/init/new24.C [new file with mode: 0644]

index f6ddb5e3a320fd55e4983257ddc2edd343f0c88d..e21bb0f09079f3d56ef70dc22b80416f9b1de6b8 100644 (file)
@@ -1,3 +1,7 @@
+2007-08-21  Jakub Jelinek  <jakub@redhat.com>
+
+       * init.c (build_new_1): Use get_target_expr instead of save_expr.
+
 2007-08-20  Pawel Sikora  <pluto@pld-linux.org>
 
        PR c++/7302
index 19093194ad60204b27471923df73261713dd8c40..ce33e42a4cb6f802431f22e0b14fc8c98732a477 100644 (file)
@@ -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);
     }
 
index 74321c891d726ba85dd0c136ea1cba3be5e2604d..4fc50cef9f0a157e3bcb558e2430bd4ab29e399b 100644 (file)
@@ -1,5 +1,7 @@
 2007-08-21  Jakub Jelinek  <jakub@redhat.com>
 
+       * 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 (file)
index 0000000..6f5613b
--- /dev/null
@@ -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;
+}