[pypy-commit] pypy default: Port the fix cffi/cffi a7550e27bbc4.
arigo
noreply at buildbot.pypy.org
Tue Sep 4 12:11:15 CEST 2012
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r57116:282cd24306f0
Date: 2012-09-04 12:11 +0200
http://bitbucket.org/pypy/pypy/changeset/282cd24306f0/
Log: Port the fix cffi/cffi a7550e27bbc4.
diff --git a/pypy/module/_cffi_backend/newtype.py b/pypy/module/_cffi_backend/newtype.py
--- a/pypy/module/_cffi_backend/newtype.py
+++ b/pypy/module/_cffi_backend/newtype.py
@@ -211,12 +211,12 @@
if is_union:
assert offset == 0
offset = maxsize
- offset = (offset + alignment - 1) & ~(alignment-1)
# Like C, if the size of this structure would be zero, we compute it
# as 1 instead. But for ctypes support, we allow the manually-
# specified totalsize to be zero in this case.
if totalsize < 0:
+ offset = (offset + alignment - 1) & ~(alignment-1)
totalsize = offset or 1
elif totalsize < offset:
raise operationerrfmt(space.w_TypeError,
diff --git a/pypy/module/_cffi_backend/test/_backend_test_c.py b/pypy/module/_cffi_backend/test/_backend_test_c.py
--- a/pypy/module/_cffi_backend/test/_backend_test_c.py
+++ b/pypy/module/_cffi_backend/test/_backend_test_c.py
@@ -2057,3 +2057,9 @@
('i', BShort)])
assert sizeof(BUnion) == 4
assert alignof(BUnion) == 2
+
+def test_unaligned_struct():
+ BInt = new_primitive_type("int")
+ BStruct = new_struct_type("foo")
+ complete_struct_or_union(BStruct, [('b', BInt, -1, 1)],
+ None, 5, 1)
More information about the pypy-commit
mailing list