src/cpu/x86/vm/c1_LIRGenerator_x86.cpp

changeset 8739
0b85ccd62409
parent 8415
d109bda16490
child 8856
ac27a9c85bea
child 9614
bb44c0e88235
     1.1 --- a/src/cpu/x86/vm/c1_LIRGenerator_x86.cpp	Tue Dec 13 10:07:12 2016 -0800
     1.2 +++ b/src/cpu/x86/vm/c1_LIRGenerator_x86.cpp	Tue Dec 13 14:37:04 2016 -0500
     1.3 @@ -1228,12 +1228,17 @@
     1.4    obj.load_item();
     1.5  
     1.6    // info for exceptions
     1.7 -  CodeEmitInfo* info_for_exception = state_for(x);
     1.8 +  CodeEmitInfo* info_for_exception =
     1.9 +      (x->needs_exception_state() ? state_for(x) :
    1.10 +                                    state_for(x, x->state_before(), true /*ignore_xhandler*/));
    1.11  
    1.12    CodeStub* stub;
    1.13    if (x->is_incompatible_class_change_check()) {
    1.14      assert(patching_info == NULL, "can't patch this");
    1.15      stub = new SimpleExceptionStub(Runtime1::throw_incompatible_class_change_error_id, LIR_OprFact::illegalOpr, info_for_exception);
    1.16 +  } else if (x->is_invokespecial_receiver_check()) {
    1.17 +    assert(patching_info == NULL, "can't patch this");
    1.18 +    stub = new DeoptimizeStub(info_for_exception);
    1.19    } else {
    1.20      stub = new SimpleExceptionStub(Runtime1::throw_class_cast_exception_id, obj.result(), info_for_exception);
    1.21    }

mercurial