8185736: missing default exception handler in calls to rethrow_Stub
authornever
Tue, 15 Aug 2017 17:18:00 +0000
changeset 46820 9380b77281d2
parent 46815 58689a7ca4e0
child 46821 0a12cf4ae24e
8185736: missing default exception handler in calls to rethrow_Stub Reviewed-by: kvn
hotspot/src/share/vm/opto/doCall.cpp
hotspot/src/share/vm/opto/output.cpp
--- a/hotspot/src/share/vm/opto/doCall.cpp	Tue Aug 15 14:03:52 2017 +0000
+++ b/hotspot/src/share/vm/opto/doCall.cpp	Tue Aug 15 17:18:00 2017 +0000
@@ -719,6 +719,7 @@
   GrowableArray<const Type*>* extypes = new (C->node_arena()) GrowableArray<const Type*>(C->node_arena(), 8, 0, NULL);
   GrowableArray<int>* saw_unloaded = new (C->node_arena()) GrowableArray<int>(C->node_arena(), 8, 0, 0);
 
+  bool default_handler = false;
   for (; !handlers.is_done(); handlers.next()) {
     ciExceptionHandler* h        = handlers.handler();
     int                 h_bci    = h->handler_bci();
@@ -741,6 +742,14 @@
     // Note:  It's OK if the BCIs repeat themselves.
     bcis->append(h_bci);
     extypes->append(h_extype);
+    if (h_bci == -1) {
+      default_handler = true;
+    }
+  }
+
+  if (!default_handler) {
+    bcis->append(-1);
+    extypes->append(TypeOopPtr::make_from_klass(env()->Throwable_klass())->is_instptr());
   }
 
   int len = bcis->length();
--- a/hotspot/src/share/vm/opto/output.cpp	Tue Aug 15 14:03:52 2017 +0000
+++ b/hotspot/src/share/vm/opto/output.cpp	Tue Aug 15 17:18:00 2017 +0000
@@ -1636,6 +1636,7 @@
       }
 
       // Set the offset of the return from the call
+      assert(handler_bcis.find(-1) != -1, "must have default handler");
       _handler_table.add_subtable(call_return, &handler_bcis, NULL, &handler_pcos);
       continue;
     }