Index: src/objects.cc |
diff --git a/src/objects.cc b/src/objects.cc |
index 9a5353fe630eaba44fecc4d3ce558c1babd343d5..03e6994a42b87b5e5abefd722decd437889f3cc7 100644 |
--- a/src/objects.cc |
+++ b/src/objects.cc |
@@ -1406,7 +1406,8 @@ void HeapObject::HeapObjectShortPrint(std::ostream& os) { // NOLINT |
} |
switch (map()->instance_type()) { |
case MAP_TYPE: |
- os << "<Map(elements=" << Map::cast(this)->elements_kind() << ")>"; |
+ os << "<Map(" << ElementsKindToString(Map::cast(this)->elements_kind()) |
+ << ")>"; |
break; |
case FIXED_ARRAY_TYPE: |
os << "<FixedArray[" << FixedArray::cast(this)->length() << "]>"; |
@@ -2958,6 +2959,13 @@ Handle<Map> Map::ReconfigureProperty(Handle<Map> old_map, int modify_index, |
split_kind, old_descriptors->GetKey(split_nof), split_attributes, |
*new_descriptors, *new_layout_descriptor); |
+ if (from_kind != to_kind) { |
+ // There was an elements kind change in the middle of transition tree and |
+ // we reconstructed the tree so that all elements kind transitions are |
+ // done at the beginning, therefore the |old_map| is no longer stable. |
+ old_map->NotifyLeafMapLayoutChange(); |
+ } |
+ |
// If |transition_target_deprecated| is true then the transition array |
// already contains entry for given descriptor. This means that the transition |
// could be inserted regardless of whether transitions array is full or not. |