verify.cc (_Jv_BytecodeVerifier::require_array_type): Special case for boolean arrays.

* verify.cc (_Jv_BytecodeVerifier::require_array_type): Special
	case for boolean arrays.

	* verify.cc (_Jv_BytecodeVerifier::compute_jump): Put PC into
	error message.

From-SVN: r47190
This commit is contained in:
Tom Tromey 2001-11-20 00:38:40 +00:00 committed by Tom Tromey
parent 497e89e14f
commit 1578fa9545
2 changed files with 19 additions and 3 deletions

View File

@ -1,5 +1,11 @@
2001-11-19 Tom Tromey <tromey@redhat.com>
* verify.cc (_Jv_BytecodeVerifier::require_array_type): Special
case for boolean arrays.
* verify.cc (_Jv_BytecodeVerifier::compute_jump): Put PC into
error message.
* verify.cc (_Jv_BytecodeVerifier::verify_instructions_0)
[op_lshl, op_lshr, op_lushr]: Shift argument is an int, not a
long.

View File

@ -28,7 +28,6 @@ details. */
// TO DO
// * read more about when classes must be loaded
// * there are bugs with boolean arrays?
// * class loader madness
// * Lots and lots of debugging and testing
// * type representation is still ugly. look for the big switches
@ -951,7 +950,18 @@ private:
type t = array.element_type ();
if (! element.compatible (t))
verify_fail ("incompatible array element type");
{
// Special case for byte arrays, which must also be boolean
// arrays.
bool ok = true;
if (element.key == byte_type)
{
type e2 (boolean_type);
ok = e2.compatible (t);
}
if (! ok)
verify_fail ("incompatible array element type");
}
// Return T and not ELEMENT, because T might be specialized.
return t;
@ -992,7 +1002,7 @@ private:
{
int npc = start_PC + offset;
if (npc < 0 || npc >= current_method->code_length)
verify_fail ("branch out of range");
verify_fail ("branch out of range", start_PC);
return npc;
}