Index: src/virtual-frame.cc |
=================================================================== |
--- src/virtual-frame.cc (revision 1527) |
+++ src/virtual-frame.cc (working copy) |
@@ -93,9 +93,11 @@ |
case FrameElement::REGISTER: |
// All copies are backed by memory or register locations. |
result.type_ = |
- FrameElement::TypeField::encode(FrameElement::COPY) | |
- FrameElement::SyncField::encode(FrameElement::NOT_SYNCED); |
+ FrameElement::TypeField::encode(FrameElement::COPY) |
+ | FrameElement::IsCopiedField::encode(false) |
+ | FrameElement::SyncField::encode(FrameElement::NOT_SYNCED); |
result.data_.index_ = index; |
+ elements_[index].set_copied(); |
break; |
case FrameElement::INVALID: |
@@ -367,7 +369,8 @@ |
// If the original may be a copy, adjust to preserve the copy-on-write |
// semantics of copied elements. |
- if (original.is_register() || original.is_memory()) { |
+ if (original.is_copied() && |
+ (original.is_register() || original.is_memory())) { |
FrameElement ignored = AdjustCopies(frame_index); |
} |