1812 // See if current stack map can be assigned to the frame in table. |
1812 // See if current stack map can be assigned to the frame in table. |
1813 // current_frame is the stackmap frame got from the last instruction. |
1813 // current_frame is the stackmap frame got from the last instruction. |
1814 // If matched, current_frame will be updated by this method. |
1814 // If matched, current_frame will be updated by this method. |
1815 bool matches = stackmap_table->match_stackmap( |
1815 bool matches = stackmap_table->match_stackmap( |
1816 current_frame, this_offset, stackmap_index, |
1816 current_frame, this_offset, stackmap_index, |
1817 !no_control_flow, true, false, &ctx, CHECK_VERIFY_(this, 0)); |
1817 !no_control_flow, true, &ctx, CHECK_VERIFY_(this, 0)); |
1818 if (!matches) { |
1818 if (!matches) { |
1819 // report type error |
1819 // report type error |
1820 verify_error(ctx, "Instruction type does not match stack map"); |
1820 verify_error(ctx, "Instruction type does not match stack map"); |
1821 return 0; |
1821 return 0; |
1822 } |
1822 } |
1859 VerificationType::reference_type(vmSymbols::java_lang_Throwable()); |
1859 VerificationType::reference_type(vmSymbols::java_lang_Throwable()); |
1860 new_frame->push_stack(throwable, CHECK_VERIFY(this)); |
1860 new_frame->push_stack(throwable, CHECK_VERIFY(this)); |
1861 } |
1861 } |
1862 ErrorContext ctx; |
1862 ErrorContext ctx; |
1863 bool matches = stackmap_table->match_stackmap( |
1863 bool matches = stackmap_table->match_stackmap( |
1864 new_frame, handler_pc, true, false, true, &ctx, CHECK_VERIFY(this)); |
1864 new_frame, handler_pc, true, false, &ctx, CHECK_VERIFY(this)); |
1865 if (!matches) { |
1865 if (!matches) { |
1866 verify_error(ctx, "Stack map does not match the one at " |
1866 verify_error(ctx, "Stack map does not match the one at " |
1867 "exception handler %d", handler_pc); |
1867 "exception handler %d", handler_pc); |
1868 return; |
1868 return; |
1869 } |
1869 } |