Index: runtime/vm/stub_code_arm.cc |
diff --git a/runtime/vm/stub_code_arm.cc b/runtime/vm/stub_code_arm.cc |
index d8cf21cb95914ba70e13edbfaec9469fa3bc2d67..1ab83806be88062609fc493387b8bf038893ca2a 100644 |
--- a/runtime/vm/stub_code_arm.cc |
+++ b/runtime/vm/stub_code_arm.cc |
@@ -1789,8 +1789,12 @@ static void GenerateSubtypeNTestCacheStub(Assembler* assembler, int n) { |
// R4: instance type arguments (still null if closure). |
__ SmiTag(R8); |
__ CompareImmediate(R8, Smi::RawValue(kClosureCid)); |
- __ ldr(R4, FieldAddress(R0, Closure::instantiator_offset()), EQ); |
- __ ldr(R8, FieldAddress(R0, Closure::function_offset()), EQ); |
+ __ b(&loop, NE); |
+ __ ldr(R4, FieldAddress(R0, Closure::function_type_arguments_offset())); |
+ __ CompareObject(R4, Object::null_object()); |
+ __ b(¬_found, NE); // Cache cannot be used for generic closures. |
+ __ ldr(R4, FieldAddress(R0, Closure::instantiator_type_arguments_offset())); |
+ __ ldr(R8, FieldAddress(R0, Closure::function_offset())); |
// R8: instance class id as Smi or function. |
__ Bind(&loop); |
__ ldr(R9, |