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); |