| Index: runtime/vm/simulator_dbc.cc
|
| diff --git a/runtime/vm/simulator_dbc.cc b/runtime/vm/simulator_dbc.cc
|
| index afb5487f7b648781c6d84937682f9aff3616295b..a5b65f078c3a29f8c4d0534f0396a6a6caa3611b 100644
|
| --- a/runtime/vm/simulator_dbc.cc
|
| +++ b/runtime/vm/simulator_dbc.cc
|
| @@ -322,6 +322,7 @@ class SimulatorHelpers {
|
| uword tags = 0;
|
| tags = RawObject::ClassIdTag::update(kDoubleCid, tags);
|
| tags = RawObject::SizeTag::update(instance_size, tags);
|
| + // Also writes zero in the hash_ field.
|
| *reinterpret_cast<uword*>(start + Double::tags_offset()) = tags;
|
| *reinterpret_cast<double*>(start + Double::value_offset()) = value;
|
| return reinterpret_cast<RawObject*>(start + kHeapObjectTag);
|
| @@ -2855,9 +2856,10 @@ RawObject* Simulator::Call(const Code& code,
|
| const intptr_t instance_size = Context::InstanceSize(num_context_variables);
|
| const uword start = thread->heap()->new_space()->TryAllocate(instance_size);
|
| if (LIKELY(start != 0)) {
|
| - uword tags = 0;
|
| + uint32_t tags = 0;
|
| tags = RawObject::ClassIdTag::update(kContextCid, tags);
|
| tags = RawObject::SizeTag::update(instance_size, tags);
|
| + // Also writes 0 in the hash_ field of the header.
|
| *reinterpret_cast<uword*>(start + Array::tags_offset()) = tags;
|
| *reinterpret_cast<uword*>(start + Context::num_variables_offset()) =
|
| num_context_variables;
|
| @@ -2898,6 +2900,7 @@ RawObject* Simulator::Call(const Code& code,
|
| const intptr_t instance_size = RawObject::SizeTag::decode(tags);
|
| const uword start = thread->heap()->new_space()->TryAllocate(instance_size);
|
| if (LIKELY(start != 0)) {
|
| + // Writes both the tags and the initial identity hash on 64 bit platforms.
|
| *reinterpret_cast<uword*>(start + Instance::tags_offset()) = tags;
|
| for (intptr_t current_offset = sizeof(RawInstance);
|
| current_offset < instance_size; current_offset += kWordSize) {
|
| @@ -2929,6 +2932,7 @@ RawObject* Simulator::Call(const Code& code,
|
| if (LIKELY(start != 0)) {
|
| RawObject* type_args = SP[0];
|
| const intptr_t type_args_offset = Bytecode::DecodeD(*pc);
|
| + // Writes both the tags and the initial identity hash on 64 bit platforms.
|
| *reinterpret_cast<uword*>(start + Instance::tags_offset()) = tags;
|
| for (intptr_t current_offset = sizeof(RawInstance);
|
| current_offset < instance_size; current_offset += kWordSize) {
|
| @@ -2972,6 +2976,8 @@ RawObject* Simulator::Call(const Code& code,
|
| tags = RawObject::SizeTag::update(instance_size, tags);
|
| }
|
| tags = RawObject::ClassIdTag::update(cid, tags);
|
| + // Writes both the tags and the initial identity hash on 64 bit
|
| + // platforms.
|
| *reinterpret_cast<uword*>(start + Instance::tags_offset()) = tags;
|
| *reinterpret_cast<RawObject**>(start + Array::length_offset()) =
|
| FP[rB];
|
|
|