X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Flibjit.c;h=51bdec5830cf63e524954c49f4b8df3c2c1c07d4;hp=a32742a1f709e05649ceee603a0f2fc8a8960522;hb=b09850fb2c28c23547fed5ac83faf0fa2d3e6b8b;hpb=370510d04a5e22140e1e7f90f5d1f0002e6dbee6 diff --git a/src/libjit.c b/src/libjit.c index a32742a..51bdec5 100644 --- a/src/libjit.c +++ b/src/libjit.c @@ -128,15 +128,23 @@ static unsigned psi_jit_struct_type_elements(struct psi_decl_struct *strct, jit_type_t **fields) { size_t i = 0, argc = psi_plist_count(strct->args), nels = 0, offset = 0, - maxalign; + maxalign, last_arg_pos = -1; struct psi_decl_arg *darg; *fields = calloc(argc + 1, sizeof(*fields)); while (psi_plist_get(strct->args, i++, &darg)) { - jit_type_t type = jit_type_copy(psi_jit_decl_arg_type(darg)); + jit_type_t type; size_t padding, alignment; + if (darg->layout->pos == last_arg_pos) { + /* skip bit fields */ + continue; + } + last_arg_pos = darg->layout->pos; + + type = jit_type_copy(psi_jit_decl_arg_type(darg)); + if ((alignment = jit_type_get_alignment(type)) > maxalign) { maxalign = alignment; }