mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-11 20:55:25 +08:00
verify.cc (class _Jv_BytecodeVerifier): Don't check for abstract classes or interfaces here...
2005-07-06 Colin Walters <walters@verbum.org> * verify.cc (class _Jv_BytecodeVerifier) <op_new>: Don't check for abstract classes or interfaces here; JVM spec says it should throw an exception, so we'll do so later. * interpret.cc (run): Throw an InstantiationException for abstract classes and interfaces. From-SVN: r101788
This commit is contained in:
parent
1ff54bfbdb
commit
3ffa3729c0
@ -1,3 +1,11 @@
|
|||||||
|
2005-07-06 Colin Walters <walters@verbum.org>
|
||||||
|
|
||||||
|
* verify.cc (class _Jv_BytecodeVerifier) <op_new>: Don't
|
||||||
|
check for abstract classes or interfaces here; JVM spec
|
||||||
|
says it should throw an exception, so we'll do so later.
|
||||||
|
* interpret.cc (run): Throw an InstantiationException for
|
||||||
|
abstract classes and interfaces.
|
||||||
|
|
||||||
2005-07-08 Andrew Haley <aph@redhat.com>
|
2005-07-08 Andrew Haley <aph@redhat.com>
|
||||||
|
|
||||||
* posix-threads.cc (_Jv_ThreadSetPriority): Use SCHED_OTHER
|
* posix-threads.cc (_Jv_ThreadSetPriority): Use SCHED_OTHER
|
||||||
|
@ -30,6 +30,7 @@ details. */
|
|||||||
#include <java/lang/NullPointerException.h>
|
#include <java/lang/NullPointerException.h>
|
||||||
#include <java/lang/ArithmeticException.h>
|
#include <java/lang/ArithmeticException.h>
|
||||||
#include <java/lang/IncompatibleClassChangeError.h>
|
#include <java/lang/IncompatibleClassChangeError.h>
|
||||||
|
#include <java/lang/InstantiationException.h>
|
||||||
#include <java/lang/Thread.h>
|
#include <java/lang/Thread.h>
|
||||||
#include <java-insns.h>
|
#include <java-insns.h>
|
||||||
#include <java-signal.h>
|
#include <java-signal.h>
|
||||||
@ -2942,6 +2943,10 @@ _Jv_InterpMethod::run (void *retp, ffi_raw *args, _Jv_InterpMethod *meth)
|
|||||||
int index = GET2U ();
|
int index = GET2U ();
|
||||||
jclass klass = (_Jv_Linker::resolve_pool_entry (meth->defining_class,
|
jclass klass = (_Jv_Linker::resolve_pool_entry (meth->defining_class,
|
||||||
index)).clazz;
|
index)).clazz;
|
||||||
|
/* VM spec, section 3.11.5 */
|
||||||
|
if ((klass->getModifiers() & Modifier::ABSTRACT)
|
||||||
|
|| klass->isInterface())
|
||||||
|
throw new java::lang::InstantiationException;
|
||||||
jobject res = _Jv_AllocObject (klass);
|
jobject res = _Jv_AllocObject (klass);
|
||||||
PUSHA (res);
|
PUSHA (res);
|
||||||
|
|
||||||
|
@ -2926,8 +2926,8 @@ private:
|
|||||||
case op_new:
|
case op_new:
|
||||||
{
|
{
|
||||||
type t = check_class_constant (get_ushort ());
|
type t = check_class_constant (get_ushort ());
|
||||||
if (t.isarray () || t.isinterface (this) || t.isabstract (this))
|
if (t.isarray ())
|
||||||
verify_fail ("type is array, interface, or abstract");
|
verify_fail ("type is array");
|
||||||
t.set_uninitialized (start_PC, this);
|
t.set_uninitialized (start_PC, this);
|
||||||
push_type (t);
|
push_type (t);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user