summaryrefslogtreecommitdiff
path: root/libjava/verify.cc
diff options
context:
space:
mode:
authortromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>2001-12-09 00:14:00 +0000
committertromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>2001-12-09 00:14:00 +0000
commitb3ed5e82a401f5aa38bc1b7667a67d9b38e05cb4 (patch)
tree7bb00a4069982ad41cef767feee33ef11cb54588 /libjava/verify.cc
parentacb6974b515c92407da21555c369d5618ea9c755 (diff)
downloadgcc-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.cc14
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)