This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
Patch: FYI: more verifier fixes
- From: Tom Tromey <tromey at redhat dot com>
- To: Java Patch List <java-patches at gcc dot gnu dot org>
- Date: 19 Nov 2001 22:15:41 -0700
- Subject: Patch: FYI: more verifier fixes
- Reply-to: tromey at redhat dot com
I'm checking this in. With this patch we can now load and verify
every class in Mauve.
Bugs fixed in this patch
* iinc and arraylength had wrong length in the branch prepass
* All calls to check_no_uninitialized_objects passed in the wrong
argument
Tom
Index: ChangeLog
from Tom Tromey <tromey@redhat.com>
* verify.cc (_Jv_BytecodeVerifier::branch_prepass) [op_iinc]:
Uses two operand bytes, not one.
[op_arraylength]: Has no operands in bytecode.
(_Jv_BytecodeVerifier::push_jump): Fixed call to
check_no_uninitialized_objects.
(_Jv_BytecodeVerifier::push_exception_jump): Likewise.
(_Jv_BytecodeVerifier::handle_ret_insn): Likewise.
(_Jv_BytecodeVerifier::handle_jsr_insn): Likewise.
Index: verify.cc
===================================================================
RCS file: /cvs/gcc/gcc/libjava/verify.cc,v
retrieving revision 1.15
diff -u -r1.15 verify.cc
--- verify.cc 2001/11/20 00:38:40 1.15
+++ verify.cc 2001/11/20 05:14:44
@@ -1037,13 +1037,13 @@
{
int npc = compute_jump (offset);
if (npc < PC)
- current_state->check_no_uninitialized_objects (current_method->max_stack);
+ current_state->check_no_uninitialized_objects (current_method->max_locals);
push_jump_merge (npc, current_state);
}
void push_exception_jump (type t, int pc)
{
- current_state->check_no_uninitialized_objects (current_method->max_stack,
+ current_state->check_no_uninitialized_objects (current_method->max_locals,
true);
state s (current_state, current_method->max_stack,
current_method->max_locals);
@@ -1114,7 +1114,7 @@
// in the enclosing context.
current_state->subroutine = get_subroutine (subr->pc);
if (subr->pc < PC)
- current_state->check_no_uninitialized_objects (current_method->max_stack);
+ current_state->check_no_uninitialized_objects (current_method->max_locals);
push_jump_merge (subr->pc, current_state, true);
}
@@ -1139,7 +1139,7 @@
int npc = compute_jump (offset);
if (npc < PC)
- current_state->check_no_uninitialized_objects (current_method->max_stack);
+ current_state->check_no_uninitialized_objects (current_method->max_locals);
check_nonrecursive_call (current_state->subroutine, npc);
// Temporarily modify the current state so that it looks like we are
@@ -1344,7 +1344,6 @@
case op_lneg:
case op_fneg:
case op_dneg:
- case op_iinc:
case op_i2l:
case op_i2f:
case op_i2d:
@@ -1371,6 +1370,7 @@
case op_areturn:
case op_return:
case op_athrow:
+ case op_arraylength:
break;
case op_bipush:
@@ -1385,12 +1385,12 @@
case op_fstore:
case op_dstore:
case op_astore:
- case op_arraylength:
case op_ret:
case op_newarray:
get_byte ();
break;
+ case op_iinc:
case op_sipush:
case op_ldc_w:
case op_ldc2_w: