--- a/hotspot/src/share/vm/classfile/stackMapTable.cpp Sat Apr 09 21:16:12 2011 -0700
+++ b/hotspot/src/share/vm/classfile/stackMapTable.cpp Tue Apr 12 14:18:53 2011 -0700
@@ -98,10 +98,13 @@
bool result = true;
StackMapFrame *stackmap_frame = _frame_array[frame_index];
if (match) {
+ // when checking handler target, match == true && update == false
+ bool is_exception_handler = !update;
// Has direct control flow from last instruction, need to match the two
// frames.
result = frame->is_assignable_to(
- stackmap_frame, CHECK_VERIFY_(frame->verifier(), false));
+ stackmap_frame, is_exception_handler,
+ CHECK_VERIFY_(frame->verifier(), false));
}
if (update) {
// Use the frame in stackmap table as current frame