Index: runtime/vm/simulator_dbc.cc |
diff --git a/runtime/vm/simulator_dbc.cc b/runtime/vm/simulator_dbc.cc |
index 356abaa47789834acedd445b49114ce33a3b6ef1..97113005c255a0941ae5c07befed0d4999bc6d55 100644 |
--- a/runtime/vm/simulator_dbc.cc |
+++ b/runtime/vm/simulator_dbc.cc |
@@ -2690,7 +2690,11 @@ RawObject* Simulator::Call(const Code& code, |
{ |
BYTECODE(AssertAssignable, A_D); // Stack: instance, type args, type, name |
RawObject** args = SP - 3; |
- if (args[0] != null_value) { |
+ const bool may_be_smi = (rA == 1); |
+ const bool is_smi = |
+ ((reinterpret_cast<intptr_t>(args[0]) & kSmiTagMask) == kSmiTag); |
+ const bool smi_ok = is_smi && may_be_smi; |
+ if (!smi_ok && (args[0] != null_value)) { |
RawSubtypeTestCache* cache = |
static_cast<RawSubtypeTestCache*>(LOAD_CONSTANT(rD)); |
if (cache != null_value) { |