diff options
Diffstat (limited to 'runtime/common_throws.cc')
| -rw-r--r-- | runtime/common_throws.cc | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/runtime/common_throws.cc b/runtime/common_throws.cc index c30272e114..a44f79e193 100644 --- a/runtime/common_throws.cc +++ b/runtime/common_throws.cc @@ -428,6 +428,8 @@ static bool IsValidImplicitCheck(uintptr_t addr, ArtMethod* method, const Instru case Instruction::INVOKE_VIRTUAL_RANGE: case Instruction::INVOKE_INTERFACE: case Instruction::INVOKE_INTERFACE_RANGE: + case Instruction::INVOKE_POLYMORPHIC: + case Instruction::INVOKE_POLYMORPHIC_RANGE: case Instruction::INVOKE_VIRTUAL_QUICK: case Instruction::INVOKE_VIRTUAL_RANGE_QUICK: { // Without inlining, we could just check that the offset is the class offset. @@ -551,6 +553,12 @@ void ThrowNullPointerExceptionFromDexPC(bool check_address, uintptr_t addr) { case Instruction::INVOKE_INTERFACE_RANGE: ThrowNullPointerExceptionForMethodAccess(instr->VRegB_3rc(), kInterface); break; + case Instruction::INVOKE_POLYMORPHIC: + ThrowNullPointerExceptionForMethodAccess(instr->VRegB_45cc(), kVirtual); + break; + case Instruction::INVOKE_POLYMORPHIC_RANGE: + ThrowNullPointerExceptionForMethodAccess(instr->VRegB_4rcc(), kVirtual); + break; case Instruction::INVOKE_VIRTUAL_QUICK: case Instruction::INVOKE_VIRTUAL_RANGE_QUICK: { // Since we replaced the method index, we ask the verifier to tell us which |