Revision: 3927
Author: [email protected]
Date: Mon Feb 22 07:42:23 2010
Log: Fix reliability crash caused by wrong assert.
These two asserts in ComputeEntryFrame are wrong since the
virtual frame already knows how to deal with the number type
information of copy elements: We do not store type
information with copy elements. Instead the backing element
contains the type information.
Review URL: http://codereview.chromium.org/652044
http://code.google.com/p/v8/source/detail?r=3927
Modified:
/branches/bleeding_edge/src/frame-element.h
/branches/bleeding_edge/src/jump-target-inl.h
/branches/bleeding_edge/src/jump-target.cc
=======================================
--- /branches/bleeding_edge/src/frame-element.h Fri Feb 19 02:02:04 2010
+++ /branches/bleeding_edge/src/frame-element.h Mon Feb 22 07:42:23 2010
@@ -65,6 +65,9 @@
}
inline void set_number_info(NumberInfo::Type info) {
+ // Copied elements do not have number info. Instead
+ // we have to inspect their backing element in the frame.
+ ASSERT(!is_copy());
value_ = value_ & ~NumberInfoField::mask();
value_ = value_ | NumberInfoField::encode(info);
}
=======================================
--- /branches/bleeding_edge/src/jump-target-inl.h Mon Feb 15 06:24:38 2010
+++ /branches/bleeding_edge/src/jump-target-inl.h Mon Feb 22 07:42:23 2010
@@ -42,7 +42,7 @@
} else if (target->is_copy()) {
entry_frame_->elements_[target->index()].set_copied();
}
- if (direction_ == BIDIRECTIONAL) {
+ if (direction_ == BIDIRECTIONAL && !target->is_copy()) {
entry_frame_->elements_[index].set_number_info(NumberInfo::kUnknown);
}
}
=======================================
--- /branches/bleeding_edge/src/jump-target.cc Mon Feb 15 06:24:38 2010
+++ /branches/bleeding_edge/src/jump-target.cc Mon Feb 22 07:42:23 2010
@@ -105,7 +105,6 @@
FrameElement* other = &reaching_frames_[j]->elements_[i];
if (element != NULL && !element->is_copy()) {
ASSERT(other != NULL);
- ASSERT(!other->is_copy());
// We overwrite the number information of one of the incoming
frames.
// This is safe because we only use the frame for emitting merge
code.
// The number information of incoming frames is not used anymore.
@@ -128,7 +127,6 @@
// elements as copied exactly when they have a copy. Undetermined
// elements are initially recorded as if in memory.
if (target != NULL) {
- ASSERT(!target->is_copy()); // These initial elements are never
copies.
entry_frame_->elements_[index] = *target;
InitializeEntryElement(index, target);
}
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev