re PR libgcj/5671 (verify.cc problem merging local variables)
authorTodd Stock <toddastock@yahoo.com>
Wed, 13 Feb 2002 17:12:27 +0000 (17:12 +0000)
committerTom Tromey <tromey@gcc.gnu.org>
Wed, 13 Feb 2002 17:12:27 +0000 (17:12 +0000)
2002-02-13  Todd Stock  <toddastock@yahoo.com>

Fix for PR libgcj/5671:
* verify.cc (state::merge): Handle case where we're merging
against an interface.

From-SVN: r49735

libjava/ChangeLog
libjava/verify.cc

index 99a6b9d3f84d25e1ef4bb233648b0d0b99fcd69d..b92b98eed531c0ce43074d858565ac079cce2890 100644 (file)
@@ -1,3 +1,9 @@
+2002-02-13  Todd Stock  <toddastock@yahoo.com>
+
+       Fix for PR libgcj/5671:
+       * verify.cc (state::merge): Handle case where we're merging
+       against an interface.
+
 2002-02-12  Tom Tromey  <tromey@redhat.com>
 
        * exception.cc (std::abort): Mark as noreturn.
index 562cfaf5bc3d7bb2c9b1f0b11baa999a0abf6e10..38421f46ad63f3ea8a1c8fdb011b7589c9510b3e 100644 (file)
@@ -675,14 +675,19 @@ private:
                      oldk = oldk->getComponentType ();
                    }
 
-                 // This loop will end when we hit Object.
-                 while (true)
+                 // Ordinarily this terminates when we hit Object...
+                 while (k != NULL)
                    {
                      if (is_assignable_from_slow (k, oldk))
                        break;
                      k = k->getSuperclass ();
                      changed = true;
                    }
+                 // ... but K could have been an interface, in which
+                 // case we'll end up here.  We just convert this
+                 // into Object.
+                 if (k == NULL)
+                   k = &java::lang::Object::class$;
 
                  if (changed)
                    {