diff -Nurdb tcc-0.9.20/tcc.c tcc-0.9.20-dmg/tcc.c --- tcc-0.9.20/tcc.c 2003-10-05 06:23:48.000000000 -0400 +++ tcc-0.9.20-dmg/tcc.c 2003-10-15 21:16:11.000000000 -0400 @@ -5394,6 +5394,16 @@ force_charshort_cast(vtop->type.t); } + if (vtop->type.t & VT_BITFIELD) { + /* bitfields first get cast to ints */ + gv(RC_INT); + } + + if (type->t & VT_BITFIELD) { + /* can't cast *to* a bitfield */ + type->t &= ~VT_BITFIELD; + } + dbt = type->t & (VT_BTYPE | VT_UNSIGNED); sbt = vtop->type.t & (VT_BTYPE | VT_UNSIGNED); diff -Nurdb tcc-0.9.20/tcctest.c tcc-0.9.20-dmg/tcctest.c --- tcc-0.9.20/tcctest.c 2003-10-05 06:23:48.000000000 -0400 +++ tcc-0.9.20-dmg/tcctest.c 2003-10-15 21:30:34.000000000 -0400 @@ -1303,6 +1303,13 @@ st1.f5++; printf("%d %d %d %d %d\n", st1.f1, st1.f2, st1.f3, st1.f4, st1.f5); + + st1.f1 = 7; + if (st1.f1 == -1) printf("st1.f1 == -1\n"); + else printf("st1.f1 != -1\n"); + if (st1.f2 == -1) printf("st1.f2 == -1\n"); + else printf("st1.f2 != -1\n"); + } #define FTEST(prefix, type, fmt)\