>>> X = type('X', (Structure,), {'_fields_': [('a', c_uint16, 8), ('b', c_uint16, 8), ('c', c_uint16, 16)]})
>>> sizeof(X)
4

Breakpoint 1, PyCStructUnionType_update_stgdict (type=type@entry=<_ctypes.PyCStructType at remote 0x1aaee50>, fields=fields@entry=[('a', <_ctypes.PyCSimpleType at remote 0x1aa1e60>, 8), ('b', <_ctypes.PyCSimpleType at remote 0x1aa1e60>, 8), ('c', <_ctypes.PyCSimpleType at remote 0x1aa1e60>, 16)], isStruct=isStruct@entry=1) at /target/cpython-fix/Modules/_ctypes/stgdict.c:602
602	        if (isStruct) {
$61 = 0
$62 = 0
$63 = 0
$64 = 0
$65 = {
  dict = {
    ob_base = {
      ob_refcnt = 1, 
      ob_type = 0x7f99fab98b60 <PyCStgDict_Type>
    }, 
    ma_used = 7, 
    ma_version_tag = 13010, 
    ma_keys = 0x7f99fab302c0, 
    ma_values = 0x0
  }, 
  size = 2, 
  align = 2, 
  length = 0, 
  ffi_type_pointer = {
    size = 2, 
    alignment = 2, 
    type = 7, 
    elements = 0x0
  }, 
  proto = 'H', 
  setfunc = 0x7f99fab88421 <H_set>, 
  getfunc = 0x7f99fab88be0 <H_get>, 
  paramfunc = 0x7f99fab796c8 <PyCSimpleType_paramfunc>, 
  argtypes = 0x0, 
  converters = 0x0, 
  restype = 0x0, 
  checker = 0x0, 
  flags = 4096, 
  format = 0x7f99fafbb340 "<H", 
  ndim = 0, 
  shape = 0x0
}

Breakpoint 2, PyCStructUnionType_update_stgdict (type=type@entry=<_ctypes.PyCStructType at remote 0x1aaee50>, fields=fields@entry=[('a', <_ctypes.PyCSimpleType at remote 0x1aa1e60>, 8), ('b', <_ctypes.PyCSimpleType at remote 0x1aa1e60>, 8), ('c', <_ctypes.PyCSimpleType at remote 0x1aa1e60>, 16)], isStruct=isStruct@entry=1) at /target/cpython-fix/Modules/_ctypes/stgdict.c:617
617	        total_align = max(align, total_align);
$66 = 16
$67 = 8
$68 = 2
$69 = 2
$70 = {
  ob_base = {
    ob_refcnt = 1, 
    ob_type = 0x7f99fab988c0 <PyCField_Type>
  }, 
  offset = 0, 
  size = 524288, 
  index = 0, 
  proto = <_ctypes.PyCSimpleType at remote 0x1aa1e60>, 
  getfunc = 0x0, 
  setfunc = 0x0, 
  anonymous = 0
}

Breakpoint 1, PyCStructUnionType_update_stgdict (type=type@entry=<_ctypes.PyCStructType at remote 0x1aaee50>, fields=fields@entry=[('a', <_ctypes.PyCSimpleType at remote 0x1aa1e60>, 8), ('b', <_ctypes.PyCSimpleType at remote 0x1aa1e60>, 8), ('c', <_ctypes.PyCSimpleType at remote 0x1aa1e60>, 16)], isStruct=isStruct@entry=1) at /target/cpython-fix/Modules/_ctypes/stgdict.c:602
602	        if (isStruct) {
$71 = 16
$72 = 8
$73 = 2
$74 = 2
$75 = {
  dict = {
    ob_base = {
      ob_refcnt = 1, 
      ob_type = 0x7f99fab98b60 <PyCStgDict_Type>
    }, 
    ma_used = 7, 
    ma_version_tag = 13010, 
    ma_keys = 0x7f99fab302c0, 
    ma_values = 0x0
  }, 
  size = 2, 
  align = 2, 
  length = 0, 
  ffi_type_pointer = {
    size = 2, 
    alignment = 2, 
    type = 7, 
    elements = 0x0
  }, 
  proto = 'H', 
  setfunc = 0x7f99fab88421 <H_set>, 
  getfunc = 0x7f99fab88be0 <H_get>, 
  paramfunc = 0x7f99fab796c8 <PyCSimpleType_paramfunc>, 
  argtypes = 0x0, 
  converters = 0x0, 
  restype = 0x0, 
  checker = 0x0, 
  flags = 4096, 
  format = 0x7f99fafbb340 "<H", 
  ndim = 0, 
  shape = 0x0
}

Breakpoint 2, PyCStructUnionType_update_stgdict (type=type@entry=<_ctypes.PyCStructType at remote 0x1aaee50>, fields=fields@entry=[('a', <_ctypes.PyCSimpleType at remote 0x1aa1e60>, 8), ('b', <_ctypes.PyCSimpleType at remote 0x1aa1e60>, 8), ('c', <_ctypes.PyCSimpleType at remote 0x1aa1e60>, 16)], isStruct=isStruct@entry=1) at /target/cpython-fix/Modules/_ctypes/stgdict.c:617
617	        total_align = max(align, total_align);
$76 = 16
$77 = 16
$78 = 2
$79 = 2
$80 = {
  ob_base = {
    ob_refcnt = 1, 
    ob_type = 0x7f99fab988c0 <PyCField_Type>
  }, 
  offset = 0, 
  size = 524296, 
  index = 1, 
  proto = <_ctypes.PyCSimpleType at remote 0x1aa1e60>, 
  getfunc = 0x0, 
  setfunc = 0x0, 
  anonymous = 0
}

Breakpoint 1, PyCStructUnionType_update_stgdict (type=type@entry=<_ctypes.PyCStructType at remote 0x1aaee50>, fields=fields@entry=[('a', <_ctypes.PyCSimpleType at remote 0x1aa1e60>, 8), ('b', <_ctypes.PyCSimpleType at remote 0x1aa1e60>, 8), ('c', <_ctypes.PyCSimpleType at remote 0x1aa1e60>, 16)], isStruct=isStruct@entry=1) at /target/cpython-fix/Modules/_ctypes/stgdict.c:602
602	        if (isStruct) {
$81 = 16
$82 = 16
$83 = 2
$84 = 2
$85 = {
  dict = {
    ob_base = {
      ob_refcnt = 1, 
      ob_type = 0x7f99fab98b60 <PyCStgDict_Type>
    }, 
    ma_used = 7, 
    ma_version_tag = 13010, 
    ma_keys = 0x7f99fab302c0, 
    ma_values = 0x0
  }, 
  size = 2, 
  align = 2, 
  length = 0, 
  ffi_type_pointer = {
    size = 2, 
    alignment = 2, 
    type = 7, 
    elements = 0x0
  }, 
  proto = 'H', 
  setfunc = 0x7f99fab88421 <H_set>, 
  getfunc = 0x7f99fab88be0 <H_get>, 
  paramfunc = 0x7f99fab796c8 <PyCSimpleType_paramfunc>, 
  argtypes = 0x0, 
  converters = 0x0, 
  restype = 0x0, 
  checker = 0x0, 
  flags = 4096, 
  format = 0x7f99fafbb340 "<H", 
  ndim = 0, 
  shape = 0x0
}

Breakpoint 2, PyCStructUnionType_update_stgdict (type=type@entry=<_ctypes.PyCStructType at remote 0x1aaee50>, fields=fields@entry=[('a', <_ctypes.PyCSimpleType at remote 0x1aa1e60>, 8), ('b', <_ctypes.PyCSimpleType at remote 0x1aa1e60>, 8), ('c', <_ctypes.PyCSimpleType at remote 0x1aa1e60>, 16)], isStruct=isStruct@entry=1) at /target/cpython-fix/Modules/_ctypes/stgdict.c:617
617	        total_align = max(align, total_align);
$86 = 16
$87 = 16
$88 = 4
$89 = 2
$90 = {
  ob_base = {
    ob_refcnt = 1, 
    ob_type = 0x7f99fab988c0 <PyCField_Type>
  }, 
  offset = 2, 
  size = 1048576, 
  index = 2, 
  proto = <_ctypes.PyCSimpleType at remote 0x1aa1e60>, 
  getfunc = 0x0, 
  setfunc = 0x0, 
  anonymous = 0
}

