re PR libgcj/13026 (libgcj verifier failure)

PR libgcj/13026:
	* verify.cc (state::copy): Only set local_changed if we're in a
	subroutine.  Correctly copy local variables which were modified
	by the subroutine.
	(push_jump_merge): Added more debugging output.

From-SVN: r73722
This commit is contained in:
Tom Tromey 2003-11-19 03:09:30 +00:00 committed by Tom Tromey
parent e2657a6707
commit e2534315a1
2 changed files with 10 additions and 3 deletions

View File

@ -1,5 +1,11 @@
2003-11-18 Tom Tromey <tromey@redhat.com>
PR libgcj/13026:
* verify.cc (state::copy): Only set local_changed if we're in a
subroutine. Correctly copy local variables which were modified
by the subroutine.
(push_jump_merge): Added more debugging output.
* jni.cc (_Jv_JNI_GetStringUTFChars): Fail gracefully if string
is null.

View File

@ -1025,11 +1025,11 @@ private:
// See push_jump_merge to understand this case.
if (ret_semantics)
locals[i] = type (copy->local_changed[i]
? unsuitable_type
? copy->locals[i]
: unused_by_subroutine_type);
else
locals[i] = copy->locals[i];
local_changed[i] = copy->local_changed[i];
local_changed[i] = subroutine ? copy->local_changed[i] : false;
}
clean_subrs ();
@ -1465,7 +1465,8 @@ private:
// which was not modified by the subroutine.
states[npc] = new state (nstate, current_method->max_stack,
current_method->max_locals, ret_semantics);
debug_print ("== New state in push_jump_merge\n");
debug_print ("== New state in push_jump_merge (ret_semantics = %s)\n",
ret_semantics ? "true" : "false");
states[npc]->print ("New", npc, current_method->max_stack,
current_method->max_locals);
}