]> gcc.gnu.org Git - gcc.git/commitdiff
re PR libgcj/24321 (instanceof erroneously causes class initialization)
authorTom Tromey <tromey@redhat.com>
Wed, 1 Mar 2006 16:01:34 +0000 (16:01 +0000)
committerTom Tromey <tromey@gcc.gnu.org>
Wed, 1 Mar 2006 16:01:34 +0000 (16:01 +0000)
PR java/24321:
* testsuite/libjava.lang/pr24321.java: New file.
* testsuite/libjava.lang/pr24321.out: New file.
* java/lang/natClass.cc (isInstance): Don't initialize class.
(isAssignableFrom): Likewise.

From-SVN: r111603

libjava/ChangeLog
libjava/java/lang/natClass.cc
libjava/testsuite/libjava.lang/pr24321.java [new file with mode: 0644]
libjava/testsuite/libjava.lang/pr24321.out [new file with mode: 0644]

index ba8b42b50c74ac5bc9a03334e11c008e46e9d997..f3bdb61e87e84bc27cd28fc4a0c8b78d9953bf13 100644 (file)
@@ -1,3 +1,11 @@
+2006-03-01  Tom Tromey  <tromey@redhat.com>
+
+       PR java/24321:
+       * testsuite/libjava.lang/pr24321.java: New file.
+       * testsuite/libjava.lang/pr24321.out: New file.
+       * java/lang/natClass.cc (isInstance): Don't initialize class.
+       (isAssignableFrom): Likewise.
+
 2006-02-27  Jakub Jelinek  <jakub@redhat.com>
 
        PR other/26208
        is_attribute_name): Likewise.
        * prims.cc (_Jv_strLengthUtf8, _Jv_hashUtf8String, _Jv_Utf8Const::init,
        _Jv_makeUtf8Const, _Jv_InitPrimClass): Likewise.
-       
+
 2006-02-08  Tom Tromey  <tromey@redhat.com>
 
        PR libgcj/26063, PR libgcj/17978, PR libgcj/10598:
index 8972cb2c49970c9d3b2b1955f1b4a90fa9222b40..38a9aff4a0bc400a533f49a29882a0251a34bf9f 100644 (file)
@@ -621,8 +621,9 @@ jboolean
 java::lang::Class::isAssignableFrom (jclass klass)
 {
   // Arguments may not have been initialized, given ".class" syntax.
-  _Jv_InitClass (this);
-  _Jv_InitClass (klass);
+  // This ensures we can at least look at their superclasses.
+  _Jv_Linker::wait_for_state (this, JV_STATE_LOADING);
+  _Jv_Linker::wait_for_state (klass, JV_STATE_LOADING);
   return _Jv_IsAssignableFrom (klass, this);
 }
 
@@ -631,7 +632,6 @@ java::lang::Class::isInstance (jobject obj)
 {
   if (! obj)
     return false;
-  _Jv_InitClass (this);
   return _Jv_IsAssignableFrom (JV_CLASS (obj), this);
 }
 
diff --git a/libjava/testsuite/libjava.lang/pr24321.java b/libjava/testsuite/libjava.lang/pr24321.java
new file mode 100644 (file)
index 0000000..513304b
--- /dev/null
@@ -0,0 +1,21 @@
+public class pr24321 {
+  static class Z {
+    static {
+      System.out.println("init");
+    }
+  }
+
+  static class Y extends Z { }
+
+  public static Object x () { return new Object(); }
+
+  public static void main(String[] args) throws Throwable
+  {
+    System.out.println(x() instanceof Z);
+
+    ClassLoader cl = pr24321.class.getClassLoader();
+    Class zk = Class.forName("pr24321$Z", false, cl);
+    Class yk = Class.forName("pr24321$Y", false, cl);
+    System.out.println(zk.isAssignableFrom(yk));
+  }
+}
diff --git a/libjava/testsuite/libjava.lang/pr24321.out b/libjava/testsuite/libjava.lang/pr24321.out
new file mode 100644 (file)
index 0000000..1d474d5
--- /dev/null
@@ -0,0 +1,2 @@
+false
+true
This page took 0.074882 seconds and 5 git commands to generate.