Chromium Code Reviews| Index: runtime/vm/deferred_objects.cc |
| diff --git a/runtime/vm/deferred_objects.cc b/runtime/vm/deferred_objects.cc |
| index d3f89c798bec0d09610beba265784c0caeda76ad..efae9134ded097d324e51145beb46ffaf1d28a62 100644 |
| --- a/runtime/vm/deferred_objects.cc |
| +++ b/runtime/vm/deferred_objects.cc |
| @@ -7,6 +7,7 @@ |
| #include "vm/code_patcher.h" |
| #include "vm/compiler.h" |
| #include "vm/deopt_instructions.h" |
| +#include "vm/disassembler.h" |
| #include "vm/flags.h" |
| #include "vm/object.h" |
| @@ -114,8 +115,17 @@ void DeferredRetAddr::Materialize(DeoptContext* deopt_context) { |
| // Check that deopt_id exists. |
| // TODO(vegorov): verify after deoptimization targets as well. |
| #ifdef DEBUG |
| - ASSERT(Thread::IsDeoptAfter(deopt_id_) || |
| - (code.GetPcForDeoptId(deopt_id_, RawPcDescriptors::kDeopt) != 0)); |
| + if (!Thread::IsDeoptAfter(deopt_id_)) { |
| + if (code.GetPcForDeoptId(deopt_id_, RawPcDescriptors::kDeopt) == 0) { |
| + OS::PrintErr("DeferredRetAddr::Materialize: deopt_id_ = %ld\n", |
| + deopt_id_); |
| + Disassembler::DisassembleCodeUnoptimized( |
| + Function::Handle(code.function()), false); |
| + } |
| + ASSERT(code.GetPcForDeoptId(deopt_id_, RawPcDescriptors::kDeopt) != 0); |
|
zra
2016/06/24 22:37:49
Hitting this assert. deopt_id_ is 38. It's listed
|
| + } |
| + // ASSERT(Thread::IsDeoptAfter(deopt_id_) || |
| + // (code.GetPcForDeoptId(deopt_id_, RawPcDescriptors::kDeopt) != 0)); |
| #endif |
| uword continue_at_pc = code.GetPcForDeoptId(deopt_id_, |
| @@ -355,6 +365,8 @@ void DeferredObject::Fill() { |
| const Array& offset_map = Array::Handle(cls.OffsetToFieldMap()); |
| for (intptr_t i = 0; i < field_count_; i++) { |
| + //RawObject* o = GetFieldOffset(i); |
| + //OS::PrintErr("i = %ld, o = %p\n", i, o); |
| offset ^= GetFieldOffset(i); |
| field ^= offset_map.At(offset.Value() / kWordSize); |
| value = GetValue(i); |