re PR libgcj/23182 (instanceof sometimes fails if compiled with -findirect-dispatch)
authorAndrew Haley <aph@redhat.com>
Fri, 9 Sep 2005 16:04:11 +0000 (16:04 +0000)
committerAndrew Haley <aph@gcc.gnu.org>
Fri, 9 Sep 2005 16:04:11 +0000 (16:04 +0000)
2005-09-09  Andrew Haley  <aph@redhat.com>

        PR libgcj/23182
        * expr.c (pop_type_0): If the expected type is object or ptr
        (i.e. void*), return the type of the object we just popped from
        the stack.

From-SVN: r104098

gcc/java/ChangeLog
gcc/java/expr.c

index 81fc91373f695646ad8b1f85027e5cb394ad9397..ed9655338ebfa07378bacefefccd6e08909a650d 100644 (file)
@@ -1,3 +1,10 @@
+2005-09-09  Andrew Haley  <aph@redhat.com>
+
+       PR libgcj/23182 
+       * expr.c (pop_type_0): If the expected type is object or ptr
+       (i.e. void*), return the type of the object we just popped from
+       the stack.
+
 2005-09-06  Andrew Pinski  <pinskia@physics.uc.edu>
 
        * java-gimplify.c (java_gimplify_block): NULL out the old BLOCK's
index d65a6ff563c79a46efa0877dee26f74e0d30bdb9..8aa49ada40fe12d0354bf5fc1931514bb1a9abfd 100644 (file)
@@ -350,6 +350,11 @@ pop_type_0 (tree type, char **messagep)
     return t;
   if (TREE_CODE (type) == POINTER_TYPE && TREE_CODE (t) == POINTER_TYPE)
     {
+      /* If the expected type we've been passed is object or ptr
+        (i.e. void*), the caller needs to know the real type.  */
+      if (type == ptr_type_node || type == object_ptr_type_node)
+        return t;
+
       /* Since the verifier has already run, we know that any
         types we see will be compatible.  In BC mode, this fact
         may be checked at runtime, but if that is so then we can