changeset 8246:b93c39bf2bcf jdk8u131-b12-aarch32-170420

AArch32 support for "8168699: Validate special case invocations"
author snazarki
date Thu, 20 Apr 2017 15:33:45 +0300
parents f1ee83181bfc
children 2c18b7ad3cc0
files src/cpu/aarch32/vm/c1_LIRGenerator_aarch32.cpp
diffstat 1 files changed, 6 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/cpu/aarch32/vm/c1_LIRGenerator_aarch32.cpp	Thu Apr 20 15:03:07 2017 +0300
+++ b/src/cpu/aarch32/vm/c1_LIRGenerator_aarch32.cpp	Thu Apr 20 15:33:45 2017 +0300
@@ -1367,12 +1367,17 @@
   obj.load_item();
 
   // info for exceptions
-  CodeEmitInfo* info_for_exception = state_for(x);
+  CodeEmitInfo* info_for_exception =
+    (x->needs_exception_state() ? state_for(x) :
+     state_for(x, x->state_before(), true /*ignore_xhandler*/));
 
   CodeStub* stub;
   if (x->is_incompatible_class_change_check()) {
     assert(patching_info == NULL, "can't patch this");
     stub = new SimpleExceptionStub(Runtime1::throw_incompatible_class_change_error_id, LIR_OprFact::illegalOpr, info_for_exception);
+  } else if (x->is_invokespecial_receiver_check()) {
+    assert(patching_info == NULL, "can't patch this");
+    stub = new DeoptimizeStub(info_for_exception);
   } else {
     stub = new SimpleExceptionStub(Runtime1::throw_class_cast_exception_id, obj.result(), info_for_exception);
   }