Index: runtime/vm/stub_code_arm64.cc |
diff --git a/runtime/vm/stub_code_arm64.cc b/runtime/vm/stub_code_arm64.cc |
index 23fb1b20b2ec80ccdf65192ab555793c241ca959..67f3bea6f39e1f6f133496b31622a0dab4cb7f29 100644 |
--- a/runtime/vm/stub_code_arm64.cc |
+++ b/runtime/vm/stub_code_arm64.cc |
@@ -1835,7 +1835,10 @@ static void GenerateSubtypeNTestCacheStub(Assembler* assembler, int n) { |
__ SmiTag(R6); |
__ CompareImmediate(R6, Smi::RawValue(kClosureCid)); |
__ b(&loop, NE); |
- __ LoadFieldFromOffset(R4, R0, Closure::instantiator_offset()); |
+ __ LoadFieldFromOffset(R4, R0, Closure::function_type_arguments_offset()); |
+ __ CompareObject(R4, Object::null_object()); |
+ __ b(¬_found, NE); // Cache cannot be used for generic closures. |
+ __ LoadFieldFromOffset(R4, R0, Closure::instantiator_type_arguments_offset()); |
__ LoadFieldFromOffset(R6, R0, Closure::function_offset()); |
// R6: instance class id as Smi or function. |
__ Bind(&loop); |