hotspot/src/share/vm/interpreter/interpreterRuntime.cpp
changeset 4571 80b553bddc26
parent 4567 7fc02fbe5c7a
child 4761 bdb7375a1fee
equal deleted inserted replaced
4569:f372ea9e5ed4 4571:80b553bddc26
   351     // assertions
   351     // assertions
   352 #ifdef ASSERT
   352 #ifdef ASSERT
   353     assert(h_exception.not_null(), "NULL exceptions should be handled by athrow");
   353     assert(h_exception.not_null(), "NULL exceptions should be handled by athrow");
   354     assert(h_exception->is_oop(), "just checking");
   354     assert(h_exception->is_oop(), "just checking");
   355     // Check that exception is a subclass of Throwable, otherwise we have a VerifyError
   355     // Check that exception is a subclass of Throwable, otherwise we have a VerifyError
   356     if (!(h_exception->is_a(SystemDictionary::throwable_klass()))) {
   356     if (!(h_exception->is_a(SystemDictionary::Throwable_klass()))) {
   357       if (ExitVMOnVerifyError) vm_exit(-1);
   357       if (ExitVMOnVerifyError) vm_exit(-1);
   358       ShouldNotReachHere();
   358       ShouldNotReachHere();
   359     }
   359     }
   360 #endif
   360 #endif
   361 
   361 
   583 
   583 
   584   assert(!HAS_PENDING_EXCEPTION, "no pending exception");
   584   assert(!HAS_PENDING_EXCEPTION, "no pending exception");
   585   Handle exception(thread, thread->vm_result());
   585   Handle exception(thread, thread->vm_result());
   586   assert(exception() != NULL, "vm result should be set");
   586   assert(exception() != NULL, "vm result should be set");
   587   thread->set_vm_result(NULL); // clear vm result before continuing (may cause memory leaks and assert failures)
   587   thread->set_vm_result(NULL); // clear vm result before continuing (may cause memory leaks and assert failures)
   588   if (!exception->is_a(SystemDictionary::threaddeath_klass())) {
   588   if (!exception->is_a(SystemDictionary::ThreadDeath_klass())) {
   589     exception = get_preinitialized_exception(
   589     exception = get_preinitialized_exception(
   590                        SystemDictionary::IllegalMonitorStateException_klass(),
   590                        SystemDictionary::IllegalMonitorStateException_klass(),
   591                        CATCH);
   591                        CATCH);
   592   }
   592   }
   593   thread->set_vm_result(exception());
   593   thread->set_vm_result(exception());
   658     if (TraceItables && Verbose) {
   658     if (TraceItables && Verbose) {
   659       ResourceMark rm(thread);
   659       ResourceMark rm(thread);
   660       tty->print_cr("Resolving: klass: %s to method: %s", info.resolved_klass()->name()->as_C_string(), info.resolved_method()->name()->as_C_string());
   660       tty->print_cr("Resolving: klass: %s to method: %s", info.resolved_klass()->name()->as_C_string(), info.resolved_method()->name()->as_C_string());
   661     }
   661     }
   662     if (info.resolved_method()->method_holder() ==
   662     if (info.resolved_method()->method_holder() ==
   663                                             SystemDictionary::object_klass()) {
   663                                             SystemDictionary::Object_klass()) {
   664       // NOTE: THIS IS A FIX FOR A CORNER CASE in the JVM spec
   664       // NOTE: THIS IS A FIX FOR A CORNER CASE in the JVM spec
   665       // (see also cpCacheOop.cpp for details)
   665       // (see also cpCacheOop.cpp for details)
   666       methodHandle rm = info.resolved_method();
   666       methodHandle rm = info.resolved_method();
   667       assert(rm->is_final() || info.has_vtable_index(),
   667       assert(rm->is_final() || info.has_vtable_index(),
   668              "should have been set already");
   668              "should have been set already");