diff options
author | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-12-09 00:14:00 +0000 |
---|---|---|
committer | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-12-09 00:14:00 +0000 |
commit | b3ed5e82a401f5aa38bc1b7667a67d9b38e05cb4 (patch) | |
tree | 7bb00a4069982ad41cef767feee33ef11cb54588 /libjava/verify.cc | |
parent | acb6974b515c92407da21555c369d5618ea9c755 (diff) | |
download | gcc-b3ed5e82a401f5aa38bc1b7667a67d9b38e05cb4.tar.gz |
* verify.cc (_Jv_BytecodeVerifier::is_assignable_from_slow):
Handle case of array whose component type is not prepared.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@47799 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/verify.cc')
-rw-r--r-- | libjava/verify.cc | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/libjava/verify.cc b/libjava/verify.cc index b0206d15f98..74499ed4fa1 100644 --- a/libjava/verify.cc +++ b/libjava/verify.cc @@ -237,12 +237,9 @@ private: if (target->isPrimitive () || source->isPrimitive ()) return false; - // _Jv_IsAssignableFrom can handle a target which is an - // interface even if it hasn't been prepared. - if ((target->state > JV_STATE_LINKED || target->isInterface ()) - && source->state > JV_STATE_LINKED) - return _Jv_IsAssignableFrom (target, source); - + // Check array case first because we can have an array whose + // component type is not prepared; _Jv_IsAssignableFrom + // doesn't handle this correctly. if (target->isArray ()) { if (! source->isArray ()) @@ -250,6 +247,11 @@ private: target = target->getComponentType (); source = source->getComponentType (); } + // _Jv_IsAssignableFrom can handle a target which is an + // interface even if it hasn't been prepared. + else if ((target->state > JV_STATE_LINKED || target->isInterface ()) + && source->state > JV_STATE_LINKED) + return _Jv_IsAssignableFrom (target, source); else if (target->isInterface ()) { for (int i = 0; i < source->interface_count; ++i) |