aboutsummaryrefslogtreecommitdiff
path: root/libjava/verify.cc
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2001-12-09 00:14:00 +0000
committerTom Tromey <tromey@gcc.gnu.org>2001-12-09 00:14:00 +0000
commit3297bb4667ebba9490c4e692fb8ce64b1a0bcef3 (patch)
tree7bb00a4069982ad41cef767feee33ef11cb54588 /libjava/verify.cc
parentecbcf7b3198489daee27a8dd913314a69e947c11 (diff)
downloadgcc-3297bb4667ebba9490c4e692fb8ce64b1a0bcef3.zip
gcc-3297bb4667ebba9490c4e692fb8ce64b1a0bcef3.tar.gz
gcc-3297bb4667ebba9490c4e692fb8ce64b1a0bcef3.tar.bz2
verify.cc (_Jv_BytecodeVerifier::is_assignable_from_slow): Handle case of array whose component type is not prepared.
* verify.cc (_Jv_BytecodeVerifier::is_assignable_from_slow): Handle case of array whose component type is not prepared. From-SVN: r47799
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 b0206d1..74499ed 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)