[pypy-commit] pypy default: issue #1983: test and fix

arigo noreply at buildbot.pypy.org
Sat Feb 14 11:18:07 CET 2015


Author: Armin Rigo <arigo at tunes.org>
Branch: 
Changeset: r75863:bc0fa15c04e1
Date: 2015-02-14 11:18 +0100
http://bitbucket.org/pypy/pypy/changeset/bc0fa15c04e1/

Log:	issue #1983: test and fix

diff --git a/rpython/jit/metainterp/pyjitpl.py b/rpython/jit/metainterp/pyjitpl.py
--- a/rpython/jit/metainterp/pyjitpl.py
+++ b/rpython/jit/metainterp/pyjitpl.py
@@ -790,7 +790,8 @@
                 eqbox = self.implement_guard_value(eqbox, pc)
                 isstandard = eqbox.getint()
                 if isstandard:
-                    self.metainterp.replace_box(box, standard_box)
+                    if isinstance(box, history.BoxPtr):
+                        self.metainterp.replace_box(box, standard_box)
                     return False
         if not self.metainterp.heapcache.is_unescaped(box):
             self.emit_force_virtualizable(fielddescr, box)
diff --git a/rpython/jit/metainterp/test/test_virtualizable.py b/rpython/jit/metainterp/test/test_virtualizable.py
--- a/rpython/jit/metainterp/test/test_virtualizable.py
+++ b/rpython/jit/metainterp/test/test_virtualizable.py
@@ -1682,6 +1682,25 @@
         res = self.meta_interp(f, [], listops=True)
         assert res == 0
 
+    def test_constant_virtualizable(self):
+        class A:
+            _virtualizable_ = ['x']
+            def __init__(self, x):
+                self.x = x
+
+        driver = JitDriver(greens=['b'], reds=['a'], virtualizables=['a'])
+
+        def f():
+            a = A(10)
+            b = promote(a)
+            while a.x > 0:
+                driver.jit_merge_point(a=a, b=b)
+                a.x = b.x - 1
+            return a.x
+
+        res = self.meta_interp(f, [], listops=True)
+        assert res == 0
+
 
 class TestLLtype(ExplicitVirtualizableTests,
                  ImplicitVirtualizableTests,


More information about the pypy-commit mailing list