Author: Armin Rigo <[email protected]>
Branch:
Changeset: r68784:f4b9171da548
Date: 2014-01-20 15:22 +0100
http://bitbucket.org/pypy/pypy/changeset/f4b9171da548/
Log: Update to cffi/ca6d6a337335
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
@@ -306,6 +306,12 @@
if bits_already_occupied + fbitsize > 8 * ftype.size:
# it would not fit, we need to start at the next
# allowed position
+ if ((sflags & SF_PACKED) != 0 and
+ (bits_already_occupied & 7) != 0):
+ raise operationerrfmt(space.w_NotImplementedError,
+ "with 'packed', gcc would compile field "
+ "'%s.%s' to reuse some bits in the previous "
+ "field", w_ctype.name, fname)
field_offset_bytes += falign
assert boffset < field_offset_bytes * 8
boffset = field_offset_bytes * 8
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
@@ -3166,6 +3166,16 @@
assert sizeof(BStruct) == sizeof(BLong) + sizeof(BChar) + sizeof(BShort)
assert alignof(BStruct) == 1
+def test_packed_with_bitfields():
+ BLong = new_primitive_type("long")
+ BChar = new_primitive_type("char")
+ BStruct = new_struct_type("struct foo")
+ py.test.raises(NotImplementedError,
+ complete_struct_or_union,
+ BStruct, [('a1', BLong, 30),
+ ('a2', BChar, 5)],
+ None, -1, -1, 8) # SF_PACKED==8
+
def test_version():
# this test is here mostly for PyPy
assert __version__ == "0.8"
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit