diff options
author | Tom Tromey <tromey@redhat.com> | 2003-11-19 03:09:30 +0000 |
---|---|---|
committer | Tom Tromey <tromey@gcc.gnu.org> | 2003-11-19 03:09:30 +0000 |
commit | e2534315a1da96a6e9cebc1e6a3c24940f6a8290 (patch) | |
tree | d9d70e2070edb10c8d23ae6a2194672dcf82e204 | |
parent | e2657a67071519e5fc70caa73e5a14d8271ef5b6 (diff) | |
download | gcc-e2534315a1da96a6e9cebc1e6a3c24940f6a8290.zip gcc-e2534315a1da96a6e9cebc1e6a3c24940f6a8290.tar.gz gcc-e2534315a1da96a6e9cebc1e6a3c24940f6a8290.tar.bz2 |
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
-rw-r--r-- | libjava/ChangeLog | 6 | ||||
-rw-r--r-- | libjava/verify.cc | 7 |
2 files changed, 10 insertions, 3 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 68b32b1..bcd687e 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -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. diff --git a/libjava/verify.cc b/libjava/verify.cc index ba408aa..34583bd 100644 --- a/libjava/verify.cc +++ b/libjava/verify.cc @@ -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); } |