Author: Armin Rigo <[email protected]>
Branch:
Changeset: r74461:04c100cbae5b
Date: 2014-11-11 21:16 +0100
http://bitbucket.org/pypy/pypy/changeset/04c100cbae5b/
Log: Issue #1924: test and fix.
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -2024,6 +2024,27 @@
"""
self.optimize_loop(ops, expected)
+ def test_virtual_raw_buffer_forced_but_slice_not_forced(self):
+ ops = """
+ [f1]
+ i0 = call('malloc', 16, descr=raw_malloc_descr)
+ guard_no_exception() []
+ i1 = int_add(i0, 8)
+ escape(i0)
+ setarrayitem_raw(i1, 1, f1, descr=rawarraydescr_float)
+ jump(f1)
+ """
+ expected = """
+ [f1]
+ i0 = call('malloc', 16, descr=raw_malloc_descr)
+ #guard_no_exception() [] # XXX should appear
+ escape(i0)
+ i1 = int_add(i0, 8)
+ setarrayitem_raw(i1, 1, f1, descr=rawarraydescr_float)
+ jump(f1)
+ """
+ self.optimize_loop(ops, expected)
+
def test_duplicate_getfield_1(self):
ops = """
[p1, p2]
diff --git a/rpython/jit/metainterp/optimizeopt/virtualize.py
b/rpython/jit/metainterp/optimizeopt/virtualize.py
--- a/rpython/jit/metainterp/optimizeopt/virtualize.py
+++ b/rpython/jit/metainterp/optimizeopt/virtualize.py
@@ -443,9 +443,17 @@
self.buffer.values[i] = newval
def getitem_raw(self, offset, length, descr):
+ if not self.is_virtual():
+ raise InvalidRawOperation
+ # see 'test_virtual_raw_buffer_forced_but_slice_not_forced'
+ # for the test above: it's not enough to check is_virtual()
+ # on the original object, because it might be a VRawSliceValue
+ # instead. If it is a virtual one, then we'll reach here anway.
return self.buffer.read_value(offset, length, descr)
def setitem_raw(self, offset, length, descr, value):
+ if not self.is_virtual():
+ raise InvalidRawOperation
self.buffer.write_value(offset, length, descr, value)
def _really_force(self, optforce):
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit