From 075723456073bf7319805ce964a3f8a036eb7d27 Mon Sep 17 00:00:00 2001 From: Michael Matz Date: Fri, 5 May 2017 23:16:43 +0200 Subject: Fix unsigned enum bit-fields See testcase. If an enum has only positive values, fits N bits, and is placed in a N-bit bit-field that bit-fields must be treated as unsigned, not signed. --- tccgen.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'tccgen.c') diff --git a/tccgen.c b/tccgen.c index cbfe5ff..b9938ea 100644 --- a/tccgen.c +++ b/tccgen.c @@ -1082,7 +1082,9 @@ ST_FUNC int gv(int rc) } else type.t = VT_INT; if((vtop->type.t & VT_UNSIGNED) || - (vtop->type.t & VT_BTYPE) == VT_BOOL) + (vtop->type.t & VT_BTYPE) == VT_BOOL || + (((vtop->type.t & VT_BTYPE) == VT_ENUM) && + vtop->type.ref->a.unsigned_enum)) type.t |= VT_UNSIGNED; gen_cast(&type); /* generate shifts */ -- cgit v1.3.1