| Index: runtime/vm/object.cc | 
| diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc | 
| index 0d5ca5f983668e6c7c36c8c1217a7d141046c4cf..4974f9c827f761eb31d4b25d7e4929ad98b612ee 100644 | 
| --- a/runtime/vm/object.cc | 
| +++ b/runtime/vm/object.cc | 
| @@ -7,6 +7,7 @@ | 
| #include "include/dart_api.h" | 
| #include "platform/assert.h" | 
| #include "vm/assembler.h" | 
| +#include "vm/become.h" | 
| #include "vm/cpu.h" | 
| #include "vm/bit_vector.h" | 
| #include "vm/bootstrap.h" | 
| @@ -562,6 +563,13 @@ void Object::InitOnce(Isolate* isolate) { | 
| cls.set_is_finalized(); | 
| cls.set_is_type_finalized(); | 
|  | 
| +  // Allocate and initialize the forwarding corpse class. | 
| +  cls = Class::New<ForwardingCorpse::FakeInstance>(kForwardingCorpse); | 
| +  cls.set_num_type_arguments(0); | 
| +  cls.set_num_own_type_arguments(0); | 
| +  cls.set_is_finalized(); | 
| +  cls.set_is_type_finalized(); | 
| + | 
| // Allocate and initialize the sentinel values of Null class. | 
| { | 
| *sentinel_ ^= | 
| @@ -929,6 +937,8 @@ class PremarkingVisitor : public ObjectVisitor { | 
| void VisitObject(RawObject* obj) { | 
| // Free list elements should never be marked. | 
| ASSERT(!obj->IsMarked()); | 
| +    // No forwarding corpses in the VM isolate. | 
| +    ASSERT(!obj->IsForwardingCorpse()); | 
| if (!obj->IsFreeListElement()) { | 
| ASSERT(obj->IsVMHeapObject()); | 
| obj->SetMarkBitUnsynchronized(); | 
| @@ -1000,6 +1010,13 @@ void Object::FinalizeVMIsolate(Isolate* isolate) { | 
| cls = isolate->object_store()->one_byte_string_class(); | 
| cls.set_name(Symbols::OneByteString()); | 
|  | 
| +  // Set up names for the pseudo-classes for free list elements and forwarding | 
| +  // corpses. Mainly this makes VM debugging easier. | 
| +  cls = isolate->class_table()->At(kFreeListElement); | 
| +  cls.set_name(Symbols::FreeListElement()); | 
| +  cls = isolate->class_table()->At(kForwardingCorpse); | 
| +  cls.set_name(Symbols::ForwardingCorpse()); | 
| + | 
| { | 
| ASSERT(isolate == Dart::vm_isolate()); | 
| WritableVMIsolateScope scope(Thread::Current()); | 
| @@ -1080,6 +1097,7 @@ void Object::VerifyBuiltinVtables() { | 
| } | 
| } | 
| ASSERT(builtin_vtables_[kFreeListElement] == 0); | 
| +  ASSERT(builtin_vtables_[kForwardingCorpse] == 0); | 
| #endif | 
| } | 
|  | 
| @@ -1916,8 +1934,6 @@ RawObject* Object::Clone(const Object& orig, Heap::Space space) { | 
|  | 
|  | 
| RawString* Class::Name() const { | 
| -  // TODO(turnidge): This assert fails for the fake kFreeListElement class. | 
| -  // Fix this. | 
| ASSERT(raw_ptr()->name_ != String::null()); | 
| return raw_ptr()->name_; | 
| } | 
|  |