re PR c++/11006 ([CNI] ICE with use of __java_boolean)
authorPaolo Carlini <paolo.carlini@oracle.com>
Wed, 6 Nov 2013 20:19:10 +0000 (20:19 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Wed, 6 Nov 2013 20:19:10 +0000 (20:19 +0000)
/cp
2013-11-06  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/11006
* init.c (build_new_1): Don't call build_java_class_ref on non-class
types.

/testsuite
2013-11-06  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/11006
* g++.dg/other/java3.C: New.

From-SVN: r204469

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

index 887ea61..6369f05 100644 (file)
@@ -1,3 +1,9 @@
+2013-11-06  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/11006
+       * init.c (build_new_1): Don't call build_java_class_ref on non-class
+       types.
+
 2013-11-05  Jason Merrill  <jason@redhat.com>
 
        PR c++/58868
index 85732ff..a4d8280 100644 (file)
@@ -2461,9 +2461,16 @@ build_new_1 (vec<tree, va_gc> **placement, tree type, tree nelts,
   if (vec_safe_is_empty (*placement) && TYPE_FOR_JAVA (elt_type))
     {
       tree class_addr;
-      tree class_decl = build_java_class_ref (elt_type);
+      tree class_decl;
       static const char alloc_name[] = "_Jv_AllocObject";
 
+      if (!MAYBE_CLASS_TYPE_P (elt_type))
+       {
+         error ("%qT isn%'t a valid Java class type", elt_type);
+         return error_mark_node;
+       }
+
+      class_decl = build_java_class_ref (elt_type);
       if (class_decl == error_mark_node)
        return error_mark_node;
 
index 463be1e..469b5c9 100644 (file)
@@ -1,3 +1,8 @@
+2013-11-06  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/11006
+       * g++.dg/other/java3.C: New.
+
 2013-11-06  Uros Bizjak  <ubizjak@gmail.com>
 
        PR target/59021
diff --git a/gcc/testsuite/g++.dg/other/java3.C b/gcc/testsuite/g++.dg/other/java3.C
new file mode 100644 (file)
index 0000000..1bc0a88
--- /dev/null
@@ -0,0 +1,7 @@
+// PR c++/11006
+
+typedef int* jclass;
+
+void foo () {
+  new __java_boolean;  // { dg-error "valid" }
+}