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