diff options
Diffstat (limited to 'runtime')
| -rw-r--r-- | runtime/verifier/method_verifier.cc | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/runtime/verifier/method_verifier.cc b/runtime/verifier/method_verifier.cc index 9faaa4a57e..4d88227956 100644 --- a/runtime/verifier/method_verifier.cc +++ b/runtime/verifier/method_verifier.cc @@ -3318,7 +3318,10 @@ ArtMethod* MethodVerifier::VerifyInvocationArgsFromIterator( } if (method_type != METHOD_INTERFACE && !actual_arg_type.IsZero()) { const RegType* res_method_class; - if (res_method != nullptr) { + // Miranda methods have the declaring interface as their declaring class, not the abstract + // class. It would be wrong to use this for the type check (interface type checks are + // postponed to runtime). + if (res_method != nullptr && !res_method->IsMiranda()) { mirror::Class* klass = res_method->GetDeclaringClass(); std::string temp; res_method_class = ®_types_.FromClass(klass->GetDescriptor(&temp), klass, |