From 8f81060859c6719281499d1f5717fc576256ab9a Mon Sep 17 00:00:00 2001 From: lemon Date: Sun, 14 Sep 2025 23:48:23 +0200 Subject: fix signed bitfield errata --- c.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'c.c') diff --git a/c.c b/c.c index aa9c024..ef4a7a1 100644 --- a/c.c +++ b/c.c @@ -2710,10 +2710,10 @@ getbits(struct function *fn, const union type ty, union ref addr, uint off, int } } else { /* shift left and shift right arithmetic to propagate sign bit */ - int sh = 8*typesize(ty) - bitsiz - bitoff; + int sh = 8*cls2siz[k] - bitsiz - bitoff; if (sh) tmp = addinstr(fn, mkinstr(Oshl, k, .l = tmp, .r = mkintcon(KI4, sh))); - sh = 8*typesize(ty) - sh + bitoff; + sh = 8*cls2siz[k] - sh + bitoff; if (sh) tmp = addinstr(fn, mkinstr(Osar, k, .l = tmp, .r = mkintcon(KI4, sh))); } -- cgit v1.2.3