@@ -624,6 +624,8 @@ class INTERPRETER_CLASS
624
624
#endif /* defined(J9VM_OPT_METHOD_HANDLE) */
625
625
}
626
626
627
+ #define isMethodDefaultConflictJ9Method (method ) (method == _currentThread->javaVM->initialMethods.throwDefaultConflict)
628
+
627
629
VMINLINE VM_BytecodeAction
628
630
j2iTransition (
629
631
REGISTER_ARGS_LIST
@@ -633,9 +635,9 @@ class INTERPRETER_CLASS
633
635
) {
634
636
VM_JITInterface::disableRuntimeInstrumentation (_currentThread);
635
637
VM_BytecodeAction rc = GOTO_RUN_METHOD;
636
- void * const jitReturnAddress = VM_JITInterface::fetchJITReturnAddress (_currentThread, _sp);
637
- J9ROMMethod* const romMethod = J9_ROM_METHOD_FROM_RAM_METHOD (_sendMethod);
638
- void * const exitPoint = j2iReturnPoint (J9ROMMETHOD_SIGNATURE (romMethod));
638
+ void * const jitReturnAddress = VM_JITInterface::fetchJITReturnAddress (_currentThread, _sp);
639
+ J9ROMMethod * const romMethod = J9_ROM_METHOD_FROM_RAM_METHOD (_sendMethod);
640
+ void * const exitPoint = j2iReturnPoint (J9ROMMETHOD_SIGNATURE (romMethod));
639
641
if (J9_ARE_ANY_BITS_SET (romMethod->modifiers , J9AccNative | J9AccAbstract)) {
640
642
_literals = (J9Method*)jitReturnAddress;
641
643
_pc = nativeReturnBytecodePC (REGISTER_ARGS, romMethod);
@@ -9499,6 +9501,20 @@ class INTERPRETER_CLASS
9499
9501
}
9500
9502
9501
9503
#if defined(J9VM_OPT_OPENJDK_METHODHANDLE)
9504
+
9505
+ VMINLINE VM_BytecodeAction
9506
+ nullCheckJ9Obj (j9object_t j9Obj, bool fromJIT, REGISTER_ARGS_LIST, UDATA decSP)
9507
+ {
9508
+ if (J9_UNEXPECTED (NULL == j9Obj)) {
9509
+ if (fromJIT) {
9510
+ _sp -= decSP;
9511
+ buildJITResolveFrame (REGISTER_ARGS);
9512
+ }
9513
+ return THROW_NPE;
9514
+ }
9515
+ return GOTO_RUN_METHOD;
9516
+ }
9517
+
9502
9518
/* This INL only covers invokeBasic dispatched directly from bytecode, invokeBasic calls
9503
9519
* dispatched from linkToVirtual is inlined to avoid need of flags and tempValues to
9504
9520
* pass the correct argCount during VM transition since the ramCP index still points
@@ -9525,12 +9541,7 @@ class INTERPRETER_CLASS
9525
9541
}
9526
9542
9527
9543
j9object_t mhReceiver = ((j9object_t *)_sp)[mhReceiverIndex];
9528
- if (J9_UNEXPECTED (NULL == mhReceiver)) {
9529
- if (fromJIT) {
9530
- buildJITResolveFrame (REGISTER_ARGS);
9531
- }
9532
- return THROW_NPE;
9533
- }
9544
+ if (nullCheckJ9Obj (mhReceiver, fromJIT, REGISTER_ARGS, 0 ) == THROW_NPE) return THROW_NPE;
9534
9545
9535
9546
j9object_t lambdaForm = J9VMJAVALANGINVOKEMETHODHANDLE_FORM (_currentThread, mhReceiver);
9536
9547
j9object_t memberName = J9VMJAVALANGINVOKELAMBDAFORM_VMENTRY (_currentThread, lambdaForm);
@@ -9554,9 +9565,7 @@ class INTERPRETER_CLASS
9554
9565
9555
9566
/* Pop memberNameObject from the stack. */
9556
9567
j9object_t memberNameObject = *(j9object_t *)_sp++;
9557
- if (J9_UNEXPECTED (NULL == memberNameObject)) {
9558
- goto throw_npe;
9559
- }
9568
+ if (nullCheckJ9Obj (memberNameObject, fromJIT, REGISTER_ARGS, true ) == THROW_NPE) return THROW_NPE;
9560
9569
9561
9570
_sendMethod = (J9Method *)(UDATA)J9OBJECT_U64_LOAD (_currentThread, memberNameObject, _vm->vmtargetOffset );
9562
9571
@@ -9566,10 +9575,10 @@ class INTERPRETER_CLASS
9566
9575
9567
9576
if (J9_ARE_NO_BITS_SET (romMethod->modifiers , J9AccStatic)) {
9568
9577
j9object_t mhReceiver = ((j9object_t *)_sp)[methodArgCount - 1 ];
9569
- if (J9_UNEXPECTED (NULL == mhReceiver)) {
9570
- goto throw_npe;
9571
- }
9578
+ if (nullCheckJ9Obj (mhReceiver, false , REGISTER_ARGS, false ) == THROW_NPE) return THROW_NPE;
9572
9579
}
9580
+ } else {
9581
+ goto throwDefaultConflict;
9573
9582
}
9574
9583
9575
9584
if (fromJIT) {
@@ -9611,13 +9620,13 @@ class INTERPRETER_CLASS
9611
9620
9612
9621
return rc;
9613
9622
9614
- throw_npe :
9623
+ throwDefaultConflict :
9615
9624
if (fromJIT) {
9616
- /* Restore SP to before popping memberNameObject. */
9617
9625
_sp -= 1 ;
9618
9626
buildJITResolveFrame (REGISTER_ARGS);
9619
9627
}
9620
- return THROW_NPE;
9628
+ // run() will run throwDefaultConflictForMemberName()
9629
+ return GOTO_RUN_METHOD;
9621
9630
}
9622
9631
9623
9632
VMINLINE VM_BytecodeAction
@@ -9628,14 +9637,7 @@ class INTERPRETER_CLASS
9628
9637
9629
9638
/* Pop memberNameObject from the stack. */
9630
9639
j9object_t memberNameObject = *(j9object_t *)_sp++;
9631
- if (J9_UNEXPECTED (NULL == memberNameObject)) {
9632
- if (fromJIT) {
9633
- /* Restore SP to before popping memberNameObject. */
9634
- _sp -= 1 ;
9635
- buildJITResolveFrame (REGISTER_ARGS);
9636
- }
9637
- return THROW_NPE;
9638
- }
9640
+ if (nullCheckJ9Obj (memberNameObject, fromJIT, REGISTER_ARGS, true ) == THROW_NPE) return THROW_NPE;
9639
9641
9640
9642
J9Method *method = (J9Method *)(UDATA)J9OBJECT_U64_LOAD (_currentThread, memberNameObject, _vm->vmtargetOffset );
9641
9643
J9ROMMethod *romMethod = J9_ROM_METHOD_FROM_RAM_METHOD (method);
@@ -9655,14 +9657,7 @@ class INTERPRETER_CLASS
9655
9657
}
9656
9658
9657
9659
j9object_t receiverObject = ((j9object_t *)_sp)[methodArgCount - 1 ];
9658
- if (J9_UNEXPECTED (NULL == receiverObject)) {
9659
- if (fromJIT) {
9660
- /* Restore SP to before popping memberNameObject. */
9661
- _sp -= 1 ;
9662
- buildJITResolveFrame (REGISTER_ARGS);
9663
- }
9664
- return THROW_NPE;
9665
- }
9660
+ if (nullCheckJ9Obj (receiverObject, fromJIT, REGISTER_ARGS, true ) == THROW_NPE) return THROW_NPE;
9666
9661
9667
9662
/* The vTable offset has been stored in memberNameObject.vmindex.
9668
9663
*
@@ -9721,30 +9716,14 @@ class INTERPRETER_CLASS
9721
9716
9722
9717
/* Pop memberNameObject from the stack. */
9723
9718
j9object_t memberNameObject = *(j9object_t *)_sp++;
9724
- if (J9_UNEXPECTED (NULL == memberNameObject)) {
9725
- if (fromJIT) {
9726
- /* Restore SP to before popping memberNameObject. */
9727
- _sp -= 1 ;
9728
- buildJITResolveFrame (REGISTER_ARGS);
9729
- }
9730
- rc = THROW_NPE;
9731
- goto done;
9732
- }
9719
+ if (nullCheckJ9Obj (memberNameObject, fromJIT, REGISTER_ARGS, true ) == THROW_NPE) return THROW_NPE;
9733
9720
9734
9721
method = (J9Method *)(UDATA)J9OBJECT_U64_LOAD (_currentThread, memberNameObject, _vm->vmtargetOffset );
9735
9722
romMethod = J9_ROM_METHOD_FROM_RAM_METHOD (method);
9736
9723
methodArgCount = romMethod->argCount ;
9737
9724
9738
9725
receiverObject = ((j9object_t *)_sp)[methodArgCount - 1 ];
9739
- if (J9_UNEXPECTED (NULL == receiverObject)) {
9740
- if (fromJIT) {
9741
- /* Restore SP to before popping memberNameObject. */
9742
- _sp -= 1 ;
9743
- buildJITResolveFrame (REGISTER_ARGS);
9744
- }
9745
- rc = THROW_NPE;
9746
- goto done;
9747
- }
9726
+ if (nullCheckJ9Obj (receiverObject, fromJIT, REGISTER_ARGS, true ) == THROW_NPE) return THROW_NPE;
9748
9727
9749
9728
receiverClass = J9OBJECT_CLAZZ (_currentThread, receiverObject);
9750
9729
@@ -9829,14 +9808,7 @@ class INTERPRETER_CLASS
9829
9808
}
9830
9809
9831
9810
j9object_t nativeMH = *(j9object_t *)_sp;
9832
- if (J9_UNEXPECTED (NULL == nativeMH)) {
9833
- if (fromJIT) {
9834
- /* Restore SP to before popping the dummy argument. */
9835
- _sp -= 1 ;
9836
- buildJITResolveFrame (REGISTER_ARGS);
9837
- }
9838
- return THROW_NPE;
9839
- }
9811
+ if (nullCheckJ9Obj (nativeMH, fromJIT, REGISTER_ARGS, true ) == THROW_NPE) return THROW_NPE;
9840
9812
9841
9813
j9object_t nepObject = J9VMJAVALANGINVOKENATIVEMETHODHANDLE_NEP (_currentThread, nativeMH);
9842
9814
j9object_t methodType = J9VMJAVALANGINVOKEMETHODHANDLE_TYPE (_currentThread, nepObject);
0 commit comments