From: Tom Tromey Date: Tue, 26 Nov 2002 06:51:14 +0000 (+0000) Subject: verify.cc (type::compatible): Check initialization status first. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b0fbe966b10e08de78928397f8a08e20df7a60fd;p=gcc.git verify.cc (type::compatible): Check initialization status first. * verify.cc (type::compatible): Check initialization status first. * interpret.cc (run) [insn_invokespecial, invokespecial_resolved]: Don't use NULLCHECK. From-SVN: r59494 --- diff --git a/libjava/ChangeLog b/libjava/ChangeLog index c2b65f4306f..df1c794e3ac 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,10 @@ +2002-11-25 Tom Tromey + + * verify.cc (type::compatible): Check initialization status + first. + * interpret.cc (run) [insn_invokespecial, invokespecial_resolved]: + Don't use NULLCHECK. + 2002-11-23 Mark Wielaard * javax/naming/AuthenticationException.java: Update copyright header. diff --git a/libjava/interpret.cc b/libjava/interpret.cc index d3f919bac13..bc324b13ba9 100644 --- a/libjava/interpret.cc +++ b/libjava/interpret.cc @@ -2795,7 +2795,10 @@ _Jv_InterpMethod::run (void *retp, ffi_raw *args) sp -= rmeth->stack_item_count; - NULLCHECK (sp[0].o); + // We don't use NULLCHECK here because we can't rely on that + // working for . So instead we do an explicit test. + if (! sp[0].o) + throw new java::lang::NullPointerException; fun = (void (*)()) rmeth->method->ncode; @@ -2813,7 +2816,10 @@ _Jv_InterpMethod::run (void *retp, ffi_raw *args) { rmeth = (_Jv_ResolvedMethod *) AVAL (); sp -= rmeth->stack_item_count; - NULLCHECK (sp[0].o); + // We don't use NULLCHECK here because we can't rely on that + // working for . So instead we do an explicit test. + if (! sp[0].o) + throw new java::lang::NullPointerException; fun = (void (*)()) rmeth->method->ncode; } goto perform_invoke; diff --git a/libjava/verify.cc b/libjava/verify.cc index 29f0f321a7f..5917ce09c77 100644 --- a/libjava/verify.cc +++ b/libjava/verify.cc @@ -458,8 +458,12 @@ private: if (key < reference_type || k.key < reference_type) return key == k.key; + // An initialized type and an uninitialized type are not + // compatible. + if (isinitialized () != k.isinitialized ()) + return false; + // The `null' type is convertible to any reference type. - // FIXME: is this correct for THIS? if (key == null_type || k.key == null_type) return true; @@ -469,11 +473,6 @@ private: && data.klass == &java::lang::Object::class$) return true; - // An initialized type and an uninitialized type are not - // compatible. - if (isinitialized () != k.isinitialized ()) - return false; - // Two uninitialized objects are compatible if either: // * The PCs are identical, or // * One PC is UNINIT.