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 ++-- test/test4.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) 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))); } diff --git a/test/test4.c b/test/test4.c index 12d9ca4..c2dcd5f 100644 --- a/test/test4.c +++ b/test/test4.c @@ -14,8 +14,8 @@ int : 0; short a:15; }; -int bitf(struct foo q) { - return q.x + q.y - q.k + q.a; +int bitf(struct foo *q) { + return q->x + q->y - q->k + q->a; } int main() { -- cgit v1.2.3