re PR java/20056 ('verification failed: incompatible type on stack' with --indirect...
authorTom Tromey <tromey@redhat.com>
Sat, 19 Feb 2005 03:57:21 +0000 (03:57 +0000)
committerTom Tromey <tromey@gcc.gnu.org>
Sat, 19 Feb 2005 03:57:21 +0000 (03:57 +0000)
PR java/20056:
* verify.cc (type::equals): Fixed test.
* testsuite/libjava.lang/PR20056.out: New file.
* testsuite/libjava.lang/PR20056.java: New file.

From-SVN: r95266

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

index 808f5273589063435f969b2626d5ca08f5209a0b..11b32285ebb3b937da3bff161f4bee1991ae0f13 100644 (file)
@@ -1,3 +1,10 @@
+2005-02-18  Tom Tromey  <tromey@redhat.com>
+
+       PR java/20056:
+       * verify.cc (type::equals): Fixed test.
+       * testsuite/libjava.lang/PR20056.out: New file.
+       * testsuite/libjava.lang/PR20056.java: New file.
+
 2005-02-18  Bryce McKinlay  <mckinlay@redhat.com>
 
        * java/util/LinkedHashMap (addEntry): Call remove() with key argument, 
diff --git a/libjava/testsuite/libjava.lang/PR20056.java b/libjava/testsuite/libjava.lang/PR20056.java
new file mode 100644 (file)
index 0000000..f73eb7f
--- /dev/null
@@ -0,0 +1,13 @@
+public class PR20056 {
+  int x;
+  PR20056(int x) {}
+  PR20056(PR20056 f) {
+    // The verifier rejected the generated code in this case.
+    this(f.x = 0);
+  }
+
+  public static void main(String[] args)
+  {
+    System.out.println("maude");
+  }
+}
diff --git a/libjava/testsuite/libjava.lang/PR20056.out b/libjava/testsuite/libjava.lang/PR20056.out
new file mode 100644 (file)
index 0000000..b3668c4
--- /dev/null
@@ -0,0 +1 @@
+maude
index 9df031634fa6b33ab99d731fedc047f9227c8935..a8093070e96bcc92ad292fd3697ae85061a6f217 100644 (file)
@@ -754,10 +754,10 @@ private:
     bool equals (const type &other, _Jv_BytecodeVerifier *vfy)
     {
       // Only works for reference types.
-      if (key != reference_type
-         || key != uninitialized_reference_type
-         || other.key != reference_type
-         || other.key != uninitialized_reference_type)
+      if ((key != reference_type
+          && key != uninitialized_reference_type)
+         || (other.key != reference_type
+             && other.key != uninitialized_reference_type))
        return false;
       // Only for single-valued types.
       if (klass->ref_next || other.klass->ref_next)