Author: Armin Rigo <ar...@tunes.org>
Branch: 
Changeset: r44291:5d7d8c44407e
Date: 2011-05-18 19:01 +0200
http://bitbucket.org/pypy/pypy/changeset/5d7d8c44407e/

Log:    Test and fix. Showed up for me on recent pypy-c's in
        optimizeopt.unroll.sameop() that would (rarely) crash.

diff --git a/pypy/jit/metainterp/history.py b/pypy/jit/metainterp/history.py
--- a/pypy/jit/metainterp/history.py
+++ b/pypy/jit/metainterp/history.py
@@ -294,8 +294,8 @@
         cpu.set_future_value_int(j, self.value)
 
     def same_constant(self, other):
-        if isinstance(other, Const):
-            return self.value == other.getint()
+        if isinstance(other, ConstInt):
+            return self.value == other.value
         return False
 
     def nonnull(self):
diff --git a/pypy/jit/metainterp/test/test_history.py 
b/pypy/jit/metainterp/test/test_history.py
--- a/pypy/jit/metainterp/test/test_history.py
+++ b/pypy/jit/metainterp/test/test_history.py
@@ -9,3 +9,20 @@
     s = lltype.cast_pointer(lltype.Ptr(S), t)
     const = ConstPtr(lltype.cast_opaque_ptr(llmemory.GCREF, s))
     assert const._getrepr_() == "*T"
+
+def test_same_constant():
+    c1a = ConstInt(0)
+    c1b = ConstInt(0)
+    c2a = ConstPtr(lltype.nullptr(llmemory.GCREF.TO))
+    c2b = ConstPtr(lltype.nullptr(llmemory.GCREF.TO))
+    c3a = Const._new(0.0)
+    c3b = Const._new(0.0)
+    assert     c1a.same_constant(c1b)
+    assert not c1a.same_constant(c2b)
+    assert not c1a.same_constant(c3b)
+    assert not c2a.same_constant(c1b)
+    assert     c2a.same_constant(c2b)
+    assert not c2a.same_constant(c3b)
+    assert not c3a.same_constant(c1b)
+    assert not c3a.same_constant(c2b)
+    assert     c3a.same_constant(c3b)
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to