From 8d9dd3c0088d69d7742889c3267e5b1a138641b0 Mon Sep 17 00:00:00 2001 From: Michael Matz Date: Mon, 1 May 2017 06:18:48 +0200 Subject: Fix more bitfield corner cases Our code generation assumes that it can load/store with the bit-fields base type, so bit_pos/bit_size must be in range for this. We could change the fields type or adjust offset/bit_pos; we do the latter. --- tccgen.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'tccgen.c') diff --git a/tccgen.c b/tccgen.c index a5de7e9..1efbc1f 100644 --- a/tccgen.c +++ b/tccgen.c @@ -3391,6 +3391,9 @@ static void struct_layout(CType *type, AttributeDef *ad) (ofs2 / (typealign * 8)) > (size/typealign))) { c = (c + ((bit_pos + 7) >> 3) + typealign - 1) & -typealign; bit_pos = 0; + } else while (bit_pos + bit_size > size * 8) { + c += size; + bit_pos -= size * 8; } offset = c; /* In PCC layout named bit-fields influence the alignment -- cgit v1.3.1