diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 99a6b9d3f84d25e1ef4bb233648b0d0b99fcd69d..b92b98eed531c0ce43074d858565ac079cce2890 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -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. diff --git a/libjava/verify.cc b/libjava/verify.cc index 562cfaf5bc3d7bb2c9b1f0b11baa999a0abf6e10..38421f46ad63f3ea8a1c8fdb011b7589c9510b3e 100644 --- a/libjava/verify.cc +++ b/libjava/verify.cc @@ -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) {