@@ -614,6 +614,8 @@ class INTERPRETER_CLASS
614
614
#endif /* defined(J9VM_OPT_METHOD_HANDLE) */
615
615
}
616
616
617
+ #define isMethodDefaultConflictJ9Method (method ) (method == _currentThread->javaVM->initialMethods.throwDefaultConflict)
618
+
617
619
VMINLINE VM_BytecodeAction
618
620
j2iTransition (
619
621
REGISTER_ARGS_LIST
@@ -623,9 +625,9 @@ class INTERPRETER_CLASS
623
625
) {
624
626
VM_JITInterface::disableRuntimeInstrumentation (_currentThread);
625
627
VM_BytecodeAction rc = GOTO_RUN_METHOD;
626
- void * const jitReturnAddress = VM_JITInterface::fetchJITReturnAddress (_currentThread, _sp);
627
- J9ROMMethod* const romMethod = J9_ROM_METHOD_FROM_RAM_METHOD (_sendMethod);
628
- void * const exitPoint = j2iReturnPoint (J9ROMMETHOD_SIGNATURE (romMethod));
628
+ void * const jitReturnAddress = VM_JITInterface::fetchJITReturnAddress (_currentThread, _sp);
629
+ J9ROMMethod * const romMethod = J9_ROM_METHOD_FROM_RAM_METHOD (_sendMethod);
630
+ void * const exitPoint = j2iReturnPoint (J9ROMMETHOD_SIGNATURE (romMethod));
629
631
if (J9_ARE_ANY_BITS_SET (romMethod->modifiers , J9AccNative | J9AccAbstract)) {
630
632
_literals = (J9Method*)jitReturnAddress;
631
633
_pc = nativeReturnBytecodePC (REGISTER_ARGS, romMethod);
@@ -9465,6 +9467,20 @@ class INTERPRETER_CLASS
9465
9467
}
9466
9468
9467
9469
#if defined(J9VM_OPT_OPENJDK_METHODHANDLE)
9470
+
9471
+ VMINLINE VM_BytecodeAction
9472
+ nullCheckJ9Obj (j9object_t j9Obj, bool fromJIT, REGISTER_ARGS_LIST, UDATA decSP)
9473
+ {
9474
+ if (J9_UNEXPECTED (NULL == j9Obj)) {
9475
+ if (fromJIT) {
9476
+ _sp -= decSP;
9477
+ buildJITResolveFrame (REGISTER_ARGS);
9478
+ }
9479
+ return THROW_NPE;
9480
+ }
9481
+ return GOTO_RUN_METHOD;
9482
+ }
9483
+
9468
9484
/* This INL only covers invokeBasic dispatched directly from bytecode, invokeBasic calls
9469
9485
* dispatched from linkToVirtual is inlined to avoid need of flags and tempValues to
9470
9486
* pass the correct argCount during VM transition since the ramCP index still points
@@ -9491,12 +9507,7 @@ class INTERPRETER_CLASS
9491
9507
}
9492
9508
9493
9509
j9object_t mhReceiver = ((j9object_t *)_sp)[mhReceiverIndex];
9494
- if (J9_UNEXPECTED (NULL == mhReceiver)) {
9495
- if (fromJIT) {
9496
- buildJITResolveFrame (REGISTER_ARGS);
9497
- }
9498
- return THROW_NPE;
9499
- }
9510
+ if (nullCheckJ9Obj (mhReceiver, fromJIT, REGISTER_ARGS, 0 ) == THROW_NPE) return THROW_NPE;
9500
9511
9501
9512
j9object_t lambdaForm = J9VMJAVALANGINVOKEMETHODHANDLE_FORM (_currentThread, mhReceiver);
9502
9513
j9object_t memberName = J9VMJAVALANGINVOKELAMBDAFORM_VMENTRY (_currentThread, lambdaForm);
@@ -9520,9 +9531,7 @@ class INTERPRETER_CLASS
9520
9531
9521
9532
/* Pop memberNameObject from the stack. */
9522
9533
j9object_t memberNameObject = *(j9object_t *)_sp++;
9523
- if (J9_UNEXPECTED (NULL == memberNameObject)) {
9524
- goto throw_npe;
9525
- }
9534
+ if (nullCheckJ9Obj (memberNameObject, fromJIT, REGISTER_ARGS, true ) == THROW_NPE) return THROW_NPE;
9526
9535
9527
9536
_sendMethod = (J9Method *)(UDATA)J9OBJECT_U64_LOAD (_currentThread, memberNameObject, _vm->vmtargetOffset );
9528
9537
@@ -9532,10 +9541,10 @@ class INTERPRETER_CLASS
9532
9541
9533
9542
if (J9_ARE_NO_BITS_SET (romMethod->modifiers , J9AccStatic)) {
9534
9543
j9object_t mhReceiver = ((j9object_t *)_sp)[methodArgCount - 1 ];
9535
- if (J9_UNEXPECTED (NULL == mhReceiver)) {
9536
- goto throw_npe;
9537
- }
9544
+ if (nullCheckJ9Obj (mhReceiver, false , REGISTER_ARGS, false ) == THROW_NPE) return THROW_NPE;
9538
9545
}
9546
+ } else {
9547
+ goto throwDefaultConflict;
9539
9548
}
9540
9549
9541
9550
if (fromJIT) {
@@ -9577,13 +9586,13 @@ class INTERPRETER_CLASS
9577
9586
9578
9587
return rc;
9579
9588
9580
- throw_npe :
9589
+ throwDefaultConflict :
9581
9590
if (fromJIT) {
9582
- /* Restore SP to before popping memberNameObject. */
9583
9591
_sp -= 1 ;
9584
9592
buildJITResolveFrame (REGISTER_ARGS);
9585
9593
}
9586
- return THROW_NPE;
9594
+ // run() will run throwDefaultConflictForMemberName()
9595
+ return GOTO_RUN_METHOD;
9587
9596
}
9588
9597
9589
9598
VMINLINE VM_BytecodeAction
@@ -9594,14 +9603,7 @@ class INTERPRETER_CLASS
9594
9603
9595
9604
/* Pop memberNameObject from the stack. */
9596
9605
j9object_t memberNameObject = *(j9object_t *)_sp++;
9597
- if (J9_UNEXPECTED (NULL == memberNameObject)) {
9598
- if (fromJIT) {
9599
- /* Restore SP to before popping memberNameObject. */
9600
- _sp -= 1 ;
9601
- buildJITResolveFrame (REGISTER_ARGS);
9602
- }
9603
- return THROW_NPE;
9604
- }
9606
+ if (nullCheckJ9Obj (memberNameObject, fromJIT, REGISTER_ARGS, true ) == THROW_NPE) return THROW_NPE;
9605
9607
9606
9608
J9Method *method = (J9Method *)(UDATA)J9OBJECT_U64_LOAD (_currentThread, memberNameObject, _vm->vmtargetOffset );
9607
9609
J9ROMMethod *romMethod = J9_ROM_METHOD_FROM_RAM_METHOD (method);
@@ -9621,14 +9623,7 @@ class INTERPRETER_CLASS
9621
9623
}
9622
9624
9623
9625
j9object_t receiverObject = ((j9object_t *)_sp)[methodArgCount - 1 ];
9624
- if (J9_UNEXPECTED (NULL == receiverObject)) {
9625
- if (fromJIT) {
9626
- /* Restore SP to before popping memberNameObject. */
9627
- _sp -= 1 ;
9628
- buildJITResolveFrame (REGISTER_ARGS);
9629
- }
9630
- return THROW_NPE;
9631
- }
9626
+ if (nullCheckJ9Obj (receiverObject, fromJIT, REGISTER_ARGS, true ) == THROW_NPE) return THROW_NPE;
9632
9627
9633
9628
/* The vTable offset has been stored in memberNameObject.vmindex.
9634
9629
*
@@ -9687,30 +9682,14 @@ class INTERPRETER_CLASS
9687
9682
9688
9683
/* Pop memberNameObject from the stack. */
9689
9684
j9object_t memberNameObject = *(j9object_t *)_sp++;
9690
- if (J9_UNEXPECTED (NULL == memberNameObject)) {
9691
- if (fromJIT) {
9692
- /* Restore SP to before popping memberNameObject. */
9693
- _sp -= 1 ;
9694
- buildJITResolveFrame (REGISTER_ARGS);
9695
- }
9696
- rc = THROW_NPE;
9697
- goto done;
9698
- }
9685
+ if (nullCheckJ9Obj (memberNameObject, fromJIT, REGISTER_ARGS, true ) == THROW_NPE) return THROW_NPE;
9699
9686
9700
9687
method = (J9Method *)(UDATA)J9OBJECT_U64_LOAD (_currentThread, memberNameObject, _vm->vmtargetOffset );
9701
9688
romMethod = J9_ROM_METHOD_FROM_RAM_METHOD (method);
9702
9689
methodArgCount = romMethod->argCount ;
9703
9690
9704
9691
receiverObject = ((j9object_t *)_sp)[methodArgCount - 1 ];
9705
- if (J9_UNEXPECTED (NULL == receiverObject)) {
9706
- if (fromJIT) {
9707
- /* Restore SP to before popping memberNameObject. */
9708
- _sp -= 1 ;
9709
- buildJITResolveFrame (REGISTER_ARGS);
9710
- }
9711
- rc = THROW_NPE;
9712
- goto done;
9713
- }
9692
+ if (nullCheckJ9Obj (receiverObject, fromJIT, REGISTER_ARGS, true ) == THROW_NPE) return THROW_NPE;
9714
9693
9715
9694
receiverClass = J9OBJECT_CLAZZ (_currentThread, receiverObject);
9716
9695
@@ -9795,14 +9774,7 @@ class INTERPRETER_CLASS
9795
9774
}
9796
9775
9797
9776
j9object_t nativeMH = *(j9object_t *)_sp;
9798
- if (J9_UNEXPECTED (NULL == nativeMH)) {
9799
- if (fromJIT) {
9800
- /* Restore SP to before popping the dummy argument. */
9801
- _sp -= 1 ;
9802
- buildJITResolveFrame (REGISTER_ARGS);
9803
- }
9804
- return THROW_NPE;
9805
- }
9777
+ if (nullCheckJ9Obj (nativeMH, fromJIT, REGISTER_ARGS, true ) == THROW_NPE) return THROW_NPE;
9806
9778
9807
9779
j9object_t nepObject = J9VMJAVALANGINVOKENATIVEMETHODHANDLE_NEP (_currentThread, nativeMH);
9808
9780
j9object_t methodType = J9VMJAVALANGINVOKEMETHODHANDLE_TYPE (_currentThread, nepObject);
0 commit comments