]> git.sur5r.net Git - cc65/commitdiff
Fixed a problem with bit-fields: Values spanning more than a byte must always
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 20 Oct 2009 08:21:12 +0000 (08:21 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 20 Oct 2009 08:21:12 +0000 (08:21 +0000)
be loaded as an int. This was not the case if the expression rhs was a char.

git-svn-id: svn://svn.cc65.org/cc65/trunk@4382 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/cc65/loadexpr.c

index fd09a4d7f7fac20aaa7a53afbe17b6f04c16e133..4802dbb2b61fdd9fcd88e88faa4a095b4b32cf3f 100644 (file)
@@ -100,8 +100,9 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr)
          * throw away the high byte anyway and may therefore load just the
          * low byte.
          */
-        if (ED_IsBitField (Expr) && Expr->BitOffs + Expr->BitWidth <= CHAR_BITS) {
-            Flags |= CF_CHAR | CF_UNSIGNED;
+        if (ED_IsBitField (Expr)) {
+            Flags |= (Expr->BitOffs + Expr->BitWidth <= CHAR_BITS)? CF_CHAR : CF_INT;
+            Flags |= CF_UNSIGNED;
         } else {
             Flags |= TypeOf (Expr->Type);
         }