diff options
| author | Michael Matz <matz@suse.de> | 2012-04-15 01:06:46 +0200 |
|---|---|---|
| committer | Michael Matz <matz@suse.de> | 2012-04-18 20:57:13 +0200 |
| commit | 5c0a2366a3bb5bdeb3b3617389d4584375d5bfbc (patch) | |
| tree | a4c54ec32646daf3b3bb5a947a40299713d45563 /tccgen.c | |
| parent | 6471ec0a2bd523edd4bbc79277a33d0b853940fa (diff) | |
| download | tinycc-5c0a2366a3bb5bdeb3b3617389d4584375d5bfbc.tar.gz tinycc-5c0a2366a3bb5bdeb3b3617389d4584375d5bfbc.tar.bz2 | |
Fix bitfield loads into char/short.
Removes a premature optimization of char/short loads
rewriting the source type. It did so also for bitfield
loads, thereby removing all the shifts/maskings.
Diffstat (limited to 'tccgen.c')
| -rw-r--r-- | tccgen.c | 5 |
1 files changed, 3 insertions, 2 deletions
@@ -2320,8 +2320,9 @@ ST_FUNC void vstore(void) ft = vtop[-1].type.t; sbt = vtop->type.t & VT_BTYPE; dbt = ft & VT_BTYPE; - if (((sbt == VT_INT || sbt == VT_SHORT) && dbt == VT_BYTE) || - (sbt == VT_INT && dbt == VT_SHORT)) { + if ((((sbt == VT_INT || sbt == VT_SHORT) && dbt == VT_BYTE) || + (sbt == VT_INT && dbt == VT_SHORT)) + && !(vtop->type.t & VT_BITFIELD)) { /* optimize char/short casts */ delayed_cast = VT_MUSTCAST; vtop->type.t = ft & (VT_TYPE & ~(VT_BITFIELD | (-1 << VT_STRUCT_SHIFT))); |
