aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tccgen.c1
-rw-r--r--tests/tcctest.c5
2 files changed, 6 insertions, 0 deletions
diff --git a/tccgen.c b/tccgen.c
index 27ea83f..cd6e690 100644
--- a/tccgen.c
+++ b/tccgen.c
@@ -4058,6 +4058,7 @@ static void gfunc_param_typed(Sym *func, Sym *arg)
gen_cast(&type);
} else if (vtop->type.t & VT_BITFIELD) {
type.t = vtop->type.t & (VT_BTYPE | VT_UNSIGNED);
+ type.ref = vtop->type.ref;
gen_cast(&type);
}
} else if (arg == NULL) {
diff --git a/tests/tcctest.c b/tests/tcctest.c
index 8f1fbf4..f8e2040 100644
--- a/tests/tcctest.c
+++ b/tests/tcctest.c
@@ -602,11 +602,16 @@ enum test {
E5 = 1000,
};
+struct S_enum {
+ enum {E6 = 42, E7, E8} e:8;
+};
void enum_test()
{
enum test b1;
/* The following should give no warning */
unsigned *p = &b1;
+ struct S_enum s = {E7};
+ printf("enum: %d\n", s.e);
printf("enum:\n%d %d %d %d %d %d\n",
E0, E1, E2, E3, E4, E5);
b1 = 1;