FFI: Shrink container of packed bitfield.

Reported by Huang Haiyang. #1451
This commit is contained in:
Mike Pall 2026-03-30 20:41:59 +02:00
parent f322ecb51e
commit e4c7d8b380

View File

@ -1307,6 +1307,8 @@ static void cp_struct_layout(CPState *cp, CTypeID sid, CTInfo sattr)
ct->info = CTINFO(CT_FIELD, ctype_cid(ct->info)); ct->info = CTINFO(CT_FIELD, ctype_cid(ct->info));
ct->size = (bofs >> 3); /* Store field offset. */ ct->size = (bofs >> 3); /* Store field offset. */
} else { } else {
if (csz > amask+1 && bsz <= amask+1)
csz = amask+1; /* Shrink container of packed bitfield. */
ct->info = CTINFO(CT_BITFIELD, ct->info = CTINFO(CT_BITFIELD,
(info & (CTF_QUAL|CTF_UNSIGNED|CTF_BOOL)) + (info & (CTF_QUAL|CTF_UNSIGNED|CTF_BOOL)) +
(csz << (CTSHIFT_BITCSZ-3)) + (bsz << CTSHIFT_BITBSZ)); (csz << (CTSHIFT_BITCSZ-3)) + (bsz << CTSHIFT_BITBSZ));