| Index: runtime/vm/flow_graph_compiler_dbc.cc
|
| diff --git a/runtime/vm/flow_graph_compiler_dbc.cc b/runtime/vm/flow_graph_compiler_dbc.cc
|
| index fad3bd807b5d51a30c724215ff89f10fefd468d8..749d20a82c1104d20c11ea7bec02749f87bd0900 100644
|
| --- a/runtime/vm/flow_graph_compiler_dbc.cc
|
| +++ b/runtime/vm/flow_graph_compiler_dbc.cc
|
| @@ -234,7 +234,20 @@ void FlowGraphCompiler::GenerateAssertAssignable(TokenPosition token_pos,
|
| if (dst_type.IsMalformedOrMalbounded()) {
|
| __ BadTypeError();
|
| } else {
|
| - __ AssertAssignable(__ AddConstant(test_cache));
|
| + bool may_be_smi = false;
|
| + if (!dst_type.IsVoidType() && dst_type.IsInstantiated()) {
|
| + const Class& type_class = Class::Handle(zone(), dst_type.type_class());
|
| + if (type_class.NumTypeArguments() == 0) {
|
| + const Class& smi_class = Class::Handle(zone(), Smi::Class());
|
| + may_be_smi = smi_class.IsSubtypeOf(TypeArguments::Handle(zone()),
|
| + type_class,
|
| + TypeArguments::Handle(zone()),
|
| + NULL,
|
| + NULL,
|
| + Heap::kOld);
|
| + }
|
| + }
|
| + __ AssertAssignable(may_be_smi ? 1 : 0, __ AddConstant(test_cache));
|
| }
|
|
|
| if (is_optimizing()) {
|
|
|