diff options
| author | Michael Matz <matz@suse.de> | 2016-08-15 18:54:11 +0200 |
|---|---|---|
| committer | Michael Matz <matz@suse.de> | 2016-12-15 17:47:11 +0100 |
| commit | 372f4b6a4ecca33191159328989dbd16d5fcc527 (patch) | |
| tree | 047d57eb247c701bacdd48f25dfe50a13f39e749 | |
| parent | d720865fb65d67acffb98d45eb7251d0102e2f9b (diff) | |
| download | tinycc-372f4b6a4ecca33191159328989dbd16d5fcc527.tar.gz tinycc-372f4b6a4ecca33191159328989dbd16d5fcc527.tar.bz2 | |
Fix enum bitfields passed to stdarg functions
VT_ENUM types use the .ref member and can be VT_BITFIELD,
so we need to copy it as well. Simply do it always.
| -rw-r--r-- | tccgen.c | 1 | ||||
| -rw-r--r-- | tests/tcctest.c | 5 |
2 files changed, 6 insertions, 0 deletions
@@ -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; |
