OSDN Git Service

gcc/testsuite
authortromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 22 Jan 2008 17:54:59 +0000 (17:54 +0000)
committertromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 22 Jan 2008 17:54:59 +0000 (17:54 +0000)
PR c++/34829:
* g++.dg/ext/pr34829.C: New file.
gcc/cp
PR c++/34829:
* init.c (build_new_1): Only disallow Java aggregates.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@131732 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/init.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/ext/pr34829.C [new file with mode: 0644]

index eab41cf..235f7cb 100644 (file)
@@ -1,3 +1,8 @@
+2008-01-22  Tom Tromey  <tromey@redhat.com>
+
+       PR c++/34829:
+       * init.c (build_new_1): Only disallow Java aggregates.
+
 2008-01-22  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/34607
index 202f3b6..a6da19f 100644 (file)
@@ -1,6 +1,6 @@
 /* Handle initialization things in C++.
    Copyright (C) 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
    Free Software Foundation, Inc.
    Contributed by Michael Tiemann (tiemann@cygnus.com)
 
@@ -1786,7 +1786,7 @@ build_new_1 (tree placement, tree type, tree nelts, tree init,
                    (alloc_fn,
                     build_tree_list (NULL_TREE, class_addr)));
     }
-  else if (TYPE_FOR_JAVA (elt_type))
+  else if (TYPE_FOR_JAVA (elt_type) && IS_AGGR_TYPE (elt_type))
     {
       error ("Java class %q#T object allocated using placement new", elt_type);
       return error_mark_node;
index ab1f6b8..ffb8e1c 100644 (file)
@@ -1,3 +1,8 @@
+2008-01-22  Tom Tromey  <tromey@redhat.com>
+
+       PR c++/34829:
+       * g++.dg/ext/pr34829.C: New file.
+
 2008-01-22  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/34607
diff --git a/gcc/testsuite/g++.dg/ext/pr34829.C b/gcc/testsuite/g++.dg/ext/pr34829.C
new file mode 100644 (file)
index 0000000..ea4b395
--- /dev/null
@@ -0,0 +1,20 @@
+// Test for PR c++/34829
+// Placement new should be ok for non-aggregate Java types.
+
+// { dg-do compile }
+// { dg-options "" }
+
+extern "Java"
+{
+  typedef __java_byte jbyte;
+}
+
+void *operator new (unsigned int s, void *m)
+{
+  return m;
+}
+
+jbyte *f(void *memory)
+{
+  return new (memory) jbyte;
+}