# HG changeset patch # User Andreas Schwab # Date 1394960846 -3600 # Sun Mar 16 10:07:26 2014 +0100 # Node ID a417a73a0713b7d46dda34649ef714010349c54f # Parent 74144b0e7858cdc1e65003043a33676893f2b988 ctypes test fixes diff -r 74144b0e7858 -r a417a73a0713 Lib/ctypes/test/test_bitfields.py --- a/Lib/ctypes/test/test_bitfields.py Sun Mar 16 13:55:19 2014 +1000 +++ b/Lib/ctypes/test/test_bitfields.py Sun Mar 16 10:07:26 2014 +0100 @@ -207,7 +207,7 @@ class X(Structure): _fields_ = [("a", c_byte, 4), ("b", c_int, 32)] - self.assertEqual(sizeof(X), sizeof(c_int)*2) + self.assertEqual(sizeof(X), alignment(c_int)+sizeof(c_int)) def test_mixed_3(self): class X(Structure): diff -r 74144b0e7858 -r a417a73a0713 Lib/ctypes/test/test_structures.py --- a/Lib/ctypes/test/test_structures.py Sun Mar 16 13:55:19 2014 +1000 +++ b/Lib/ctypes/test/test_structures.py Sun Mar 16 10:07:26 2014 +0100 @@ -83,7 +83,7 @@ class Y(Structure): _fields_ = [("x", c_char * 3), ("y", c_int)] - self.assertEqual(alignment(Y), calcsize("i")) + self.assertEqual(alignment(Y), alignment(c_int)) self.assertEqual(sizeof(Y), calcsize("3si")) class SI(Structure): @@ -175,13 +175,6 @@ self.assertEqual(sizeof(X), 10) self.assertEqual(X.b.offset, 2) - class X(Structure): - _fields_ = [("a", c_byte), - ("b", c_longlong)] - _pack_ = 4 - self.assertEqual(sizeof(X), 12) - self.assertEqual(X.b.offset, 4) - import struct longlong_size = struct.calcsize("q") longlong_align = struct.calcsize("bq") - longlong_size @@ -189,9 +182,16 @@ class X(Structure): _fields_ = [("a", c_byte), ("b", c_longlong)] + _pack_ = 4 + self.assertEqual(sizeof(X), min(4, longlong_align) + longlong_size) + self.assertEqual(X.b.offset, min(4, longlong_align)) + + class X(Structure): + _fields_ = [("a", c_byte), + ("b", c_longlong)] _pack_ = 8 - self.assertEqual(sizeof(X), longlong_align + longlong_size) + self.assertEqual(sizeof(X), min(8, longlong_align) + longlong_size) self.assertEqual(X.b.offset, min(8, longlong_align)) diff -r 74144b0e7858 -r a417a73a0713 Modules/_ctypes/cfield.c --- a/Modules/_ctypes/cfield.c Sun Mar 16 13:55:19 2014 +1000 +++ b/Modules/_ctypes/cfield.c Sun Mar 16 10:07:26 2014 +0100 @@ -1640,9 +1640,9 @@ /* #define CHAR_ALIGN (sizeof(s_char) - sizeof(char)) #define SHORT_ALIGN (sizeof(s_short) - sizeof(short)) -#define INT_ALIGN (sizeof(s_int) - sizeof(int)) #define LONG_ALIGN (sizeof(s_long) - sizeof(long)) */ +#define INT_ALIGN (sizeof(s_int) - sizeof(int)) #define FLOAT_ALIGN (sizeof(s_float) - sizeof(float)) #define DOUBLE_ALIGN (sizeof(s_double) - sizeof(double)) #define LONGDOUBLE_ALIGN (sizeof(s_long_double) - sizeof(long double)) @@ -1684,8 +1684,8 @@ ffi_type ffi_type_uint16 = { 2, 2, FFI_TYPE_UINT16 }; ffi_type ffi_type_sint16 = { 2, 2, FFI_TYPE_SINT16 }; -ffi_type ffi_type_uint32 = { 4, 4, FFI_TYPE_UINT32 }; -ffi_type ffi_type_sint32 = { 4, 4, FFI_TYPE_SINT32 }; +ffi_type ffi_type_uint32 = { 4, INT_ALIGN, FFI_TYPE_UINT32 }; +ffi_type ffi_type_sint32 = { 4, INT_ALIGN, FFI_TYPE_SINT32 }; ffi_type ffi_type_uint64 = { 8, LONG_LONG_ALIGN, FFI_TYPE_UINT64 }; ffi_type ffi_type_sint64 = { 8, LONG_LONG_ALIGN, FFI_TYPE_SINT64 };