mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-11 18:05:19 +08:00
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:
parent
e2657a6707
commit
e2534315a1
@ -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.
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user