Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r1274:52dcd2ee1de1 Date: 2013-06-19 10:17 +0200 http://bitbucket.org/cffi/cffi/changeset/52dcd2ee1de1/
Log: merge heads diff --git a/c/_cffi_backend.c b/c/_cffi_backend.c --- a/c/_cffi_backend.c +++ b/c/_cffi_backend.c @@ -3421,6 +3421,7 @@ } #define SF_MSVC_BITFIELDS 1 +#define SF_GCC_ARM_BITFIELDS 2 static PyObject *b_complete_struct_or_union(PyObject *self, PyObject *args) { @@ -3435,7 +3436,11 @@ #ifdef MS_WIN32 int sflags = SF_MSVC_BITFIELDS; #else +# ifdef __arm__ + int sflags = SF_GCC_ARM_BITFIELDS; +# else int sflags = 0; +# endif #endif if (!PyArg_ParseTuple(args, "O!O!|Onii:complete_struct_or_union", @@ -3499,8 +3504,7 @@ goto error; do_align = 1; -#ifndef __arm__ - if (fbitsize >= 0) { + if (!(sflags & SF_GCC_ARM_BITFIELDS) && fbitsize >= 0) { if (!(sflags & SF_MSVC_BITFIELDS)) { /* GCC: anonymous bitfields (of any size) don't cause alignment */ do_align = PyText_GetSize(fname) > 0; @@ -3510,7 +3514,6 @@ do_align = fbitsize > 0; } } -#endif if (alignment < falign && do_align) alignment = falign; diff --git a/c/test_c.py b/c/test_c.py --- a/c/test_c.py +++ b/c/test_c.py @@ -2780,10 +2780,10 @@ ('b1', BInt, 9), ('b2', BUInt, 7), ('c', BChar, -1)], -1, -1, -1, flag) - if flag == 0: # gcc + if flag % 2 == 0: # gcc and gcc ARM assert typeoffsetof(BStruct, 'c') == (BChar, 3) assert sizeof(BStruct) == 4 - else: # msvc + else: # msvc assert typeoffsetof(BStruct, 'c') == (BChar, 8) assert sizeof(BStruct) == 12 assert alignof(BStruct) == 4 @@ -2796,7 +2796,10 @@ if flag == 0: # gcc assert sizeof(BStruct) == 5 assert alignof(BStruct) == 1 - else: # msvc + elif flag == 1: # msvc + assert sizeof(BStruct) == 6 + assert alignof(BStruct) == 2 + else: # gcc ARM assert sizeof(BStruct) == 6 assert alignof(BStruct) == 2 # @@ -2808,10 +2811,15 @@ if flag == 0: # gcc assert typeoffsetof(BStruct, 'c') == (BChar, 4) assert sizeof(BStruct) == 5 - else: # msvc + assert alignof(BStruct) == 1 + elif flag == 1: # msvc assert typeoffsetof(BStruct, 'c') == (BChar, 1) assert sizeof(BStruct) == 2 - assert alignof(BStruct) == 1 + assert alignof(BStruct) == 1 + else: # gcc ARM + assert typeoffsetof(BStruct, 'c') == (BChar, 4) + assert sizeof(BStruct) == 8 + assert alignof(BStruct) == 4 def test_bitfield_as_gcc(): @@ -2820,6 +2828,9 @@ def test_bitfield_as_msvc(): _test_bitfield_details(flag=1) +def test_bitfield_as_arm_gcc(): + _test_bitfield_details(flag=2) + def test_version(): # this test is here mostly for PyPy _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit