[pypy-commit] cffi default: merge heads
arigo
noreply at buildbot.pypy.org
Wed Jun 19 10:17:38 CEST 2013
Author: Armin Rigo <arigo at 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
More information about the pypy-commit
mailing list