--- a/hotspot/src/share/vm/classfile/verifier.cpp Fri Aug 01 19:03:26 2014 -0700
+++ b/hotspot/src/share/vm/classfile/verifier.cpp Sat Aug 02 16:28:59 2014 -0400
@@ -620,8 +620,6 @@
// flow from current instruction to the next
// instruction in sequence
- set_furthest_jump(0);
-
Bytecodes::Code opcode;
while (!bcs.is_last_bytecode()) {
// Check for recursive re-verification before each bytecode.
@@ -1780,7 +1778,7 @@
// If matched, current_frame will be updated by this method.
bool matches = stackmap_table->match_stackmap(
current_frame, this_offset, stackmap_index,
- !no_control_flow, true, &ctx, CHECK_VERIFY_(this, 0));
+ !no_control_flow, true, false, &ctx, CHECK_VERIFY_(this, 0));
if (!matches) {
// report type error
verify_error(ctx, "Instruction type does not match stack map");
@@ -1827,7 +1825,7 @@
}
ErrorContext ctx;
bool matches = stackmap_table->match_stackmap(
- new_frame, handler_pc, true, false, &ctx, CHECK_VERIFY(this));
+ new_frame, handler_pc, true, false, true, &ctx, CHECK_VERIFY(this));
if (!matches) {
verify_error(ctx, "Stack map does not match the one at "
"exception handler %d", handler_pc);
@@ -2238,13 +2236,6 @@
return;
}
- // Make sure that this call is not jumped over.
- if (bci < furthest_jump()) {
- verify_error(ErrorContext::bad_code(bci),
- "Bad <init> method call from inside of a branch");
- return;
- }
-
// Make sure that this call is not done from within a TRY block because
// that can result in returning an incomplete object. Simply checking
// (bci >= start_pc) also ensures that this call is not done after a TRY