[vm/compiler] proper reason for deopt stub
Rationale:
Reporting check-class instead of the proper unbox
yields an incorrect compiler diagnostic, which may
obscure subsequent debugging.
https://github.com/dart-lang/sdk/issues/35335
Change-Id: I99358ef3432e77b4432d9a96755747eaadc27067
Reviewed-on: https://dart-review.googlesource.com/c/87161
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Aart Bik <ajcbik@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
diff --git a/runtime/vm/compiler/backend/il.cc b/runtime/vm/compiler/backend/il.cc
index 02a598f..91e54d8 100644
--- a/runtime/vm/compiler/backend/il.cc
+++ b/runtime/vm/compiler/backend/il.cc
@@ -4555,7 +4555,7 @@
const Register box = locs()->in(0).reg();
const Register temp =
(locs()->temp_count() > 0) ? locs()->temp(0).reg() : kNoRegister;
- Label* deopt = compiler->AddDeoptStub(GetDeoptId(), ICData::kDeoptCheckClass);
+ Label* deopt = compiler->AddDeoptStub(GetDeoptId(), ICData::kDeoptUnbox);
Label is_smi;
if ((value()->Type()->ToNullableCid() == box_cid) &&
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 110bf5c..e4d0987 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -1798,6 +1798,7 @@
V(BinaryDoubleOp) \
V(UnaryOp) \
V(UnboxInteger) \
+ V(Unbox) \
V(CheckArrayBound) \
V(AtCall) \
V(GuardField) \