Author: Armin Rigo <ar...@tunes.org> 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 pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit