[pypy-commit] pypy optinfo-into-bridges-2: fix two bugs in 3170ca56ec4a:
cfbolz
pypy.commits at gmail.com
Tue Feb 21 07:50:20 EST 2017
Author: Carl Friedrich Bolz <cfbolz at gmx.de>
Branch: optinfo-into-bridges-2
Changeset: r90260:fec88c2114cb
Date: 2017-02-19 22:02 +0100
http://bitbucket.org/pypy/pypy/changeset/fec88c2114cb/
Log: fix two bugs in 3170ca56ec4a:
- wraparound problems in integer_fits
- pending fields were broken by the change from short to regular
integers
diff --git a/rpython/jit/metainterp/resume.py b/rpython/jit/metainterp/resume.py
--- a/rpython/jit/metainterp/resume.py
+++ b/rpython/jit/metainterp/resume.py
@@ -1004,8 +1004,8 @@
if pendingfields:
for i in range(len(pendingfields)):
lldescr = pendingfields[i].lldescr
- num = pendingfields[i].num
- fieldnum = pendingfields[i].fieldnum
+ num = rarithmetic.widen(pendingfields[i].num)
+ fieldnum = rarithmetic.widen(pendingfields[i].fieldnum)
itemindex = pendingfields[i].itemindex
descr = annlowlevel.cast_base_ptr_to_instance(AbstractDescr,
lldescr)
diff --git a/rpython/jit/metainterp/resumecode.py b/rpython/jit/metainterp/resumecode.py
--- a/rpython/jit/metainterp/resumecode.py
+++ b/rpython/jit/metainterp/resumecode.py
@@ -22,15 +22,18 @@
"""
from rpython.rtyper.lltypesystem import rffi, lltype
-from rpython.rlib import objectmodel
+from rpython.rlib import objectmodel, rarithmetic
class TagOverflow(Exception):
pass
def integer_fits(item):
- item *= 2
+ try:
+ item = rarithmetic.ovfcheck(item * 2)
+ except OverflowError:
+ return False
if item < 0:
- item = ~item
+ item = ~item # can't overflow
# we can fit up to 22 content bits into 1-3 bytes (24 bits, with 2 continuation
# bits)
return item < 2 ** 22
diff --git a/rpython/jit/metainterp/test/test_resumecode.py b/rpython/jit/metainterp/test/test_resumecode.py
--- a/rpython/jit/metainterp/test/test_resumecode.py
+++ b/rpython/jit/metainterp/test/test_resumecode.py
@@ -1,3 +1,4 @@
+import sys
import pytest
from rpython.jit.metainterp.resumecode import create_numbering,\
unpack_numbering, Reader, Writer, TagOverflow
@@ -7,12 +8,10 @@
def test_tag_overflow():
w = Writer()
- with pytest.raises(TagOverflow):
- w.append_int(2**21)
- with pytest.raises(TagOverflow):
- w.append_int(-2**22)
- with pytest.raises(TagOverflow):
- w.append_int(-2**21-1)
+ for bad in [2 ** 21, -2**22, -2**21-1,
+ sys.maxint, -sys.maxint-1]:
+ with pytest.raises(TagOverflow):
+ w.append_int(bad)
examples = [
[1, 2, 3, 4, 257, 10000, 13, 15],
More information about the pypy-commit
mailing list