Turn soft failure into hard failure.
If we cannot guarantee the assignability at compile-time, neither can we
at runtime.
Test: test.py
Bug: 28313047
Change-Id: I42070a523a003f067370e739f1d808610dfefbaa
diff --git a/runtime/verifier/method_verifier.cc b/runtime/verifier/method_verifier.cc
index 446f2e1..b941611 100644
--- a/runtime/verifier/method_verifier.cc
+++ b/runtime/verifier/method_verifier.cc
@@ -3967,9 +3967,9 @@
false);
}
if (!res_method_class->IsAssignableFrom(adjusted_type, this)) {
- Fail(adjusted_type.IsUnresolvedTypes()
+ Fail((adjusted_type.IsUnresolvedTypes() || res_method_class->IsUnresolvedTypes())
? VERIFY_ERROR_UNRESOLVED_TYPE_CHECK
- : VERIFY_ERROR_BAD_CLASS_SOFT)
+ : VERIFY_ERROR_BAD_CLASS_HARD)
<< "'this' argument '" << actual_arg_type << "' not instance of '"
<< *res_method_class << "'";
// Continue on soft failures. We need to find possible hard failures to avoid problems in