# HG changeset patch # User asaha # Date 1465242996 25200 # Node ID 36a1a2875ed55fa17818f3eb203e27922a7b4589 # Parent 8a60a302f1c7a607ca1f0694f337eb769d70af86# Parent 286fe17d81c3d153611a28e50926083ae934cc56 Merge diff -r 8a60a302f1c7 -r 36a1a2875ed5 .hgtags --- a/.hgtags Tue May 31 10:29:15 2016 -0700 +++ b/.hgtags Mon Jun 06 12:56:36 2016 -0700 @@ -872,6 +872,7 @@ 8ed377d2cec94435d1617a37999960a24be73ad9 jdk8u101-b08 9be452c4e7161e60d623d55bb72ad013386aefd1 jdk8u101-b09 218a44a163fa8c2532fd5f2e8ea9bc3c9c2ca8cf jdk8u101-b10 +0095e54dcaa1acfe1614feff9600734c26af7ae8 jdk8u101-b11 d6c92b9e192ef97305a699e868387d55821c81ad jdk8u102-b00 d6c92b9e192ef97305a699e868387d55821c81ad jdk8u82-b00 516a64e6d7c2dc29fd932bf3b8313e560a01bcd0 jdk8u102-b01 diff -r 8a60a302f1c7 -r 36a1a2875ed5 src/share/vm/classfile/verifier.cpp --- a/src/share/vm/classfile/verifier.cpp Tue May 31 10:29:15 2016 -0700 +++ b/src/share/vm/classfile/verifier.cpp Mon Jun 06 12:56:36 2016 -0700 @@ -2323,9 +2323,17 @@ case Bytecodes::_ifnonnull: target = bcs.dest(); if (visited_branches->contains(bci)) { - if (bci_stack->is_empty()) return true; - // Pop a bytecode starting offset and scan from there. - bcs.set_start(bci_stack->pop()); + if (bci_stack->is_empty()) { + if (handler_stack->is_empty()) { + return true; + } else { + // Parse the catch handlers for try blocks containing athrow. + bcs.set_start(handler_stack->pop()); + } + } else { + // Pop a bytecode starting offset and scan from there. + bcs.set_start(bci_stack->pop()); + } } else { if (target > bci) { // forward branch if (target >= code_length) return false; @@ -2348,9 +2356,17 @@ case Bytecodes::_goto_w: target = (opcode == Bytecodes::_goto ? bcs.dest() : bcs.dest_w()); if (visited_branches->contains(bci)) { - if (bci_stack->is_empty()) return true; - // Been here before, pop new starting offset from stack. - bcs.set_start(bci_stack->pop()); + if (bci_stack->is_empty()) { + if (handler_stack->is_empty()) { + return true; + } else { + // Parse the catch handlers for try blocks containing athrow. + bcs.set_start(handler_stack->pop()); + } + } else { + // Been here before, pop new starting offset from stack. + bcs.set_start(bci_stack->pop()); + } } else { if (target >= code_length) return false; // Continue scanning from the target onward.