Improved codegen for unsigned char type comparison with numeric constants.

This commit is contained in:
acqn
2021-02-23 17:39:02 +08:00
committed by Oliver Schmidt
parent 6f5ad51816
commit ea0c634e12

View File

@@ -2845,7 +2845,7 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */
} }
/* Determine the type of the operation. */ /* Determine the type of the operation. */
if (IsTypeChar (Expr->Type) && rconst && RightSigned) { if (IsTypeChar (Expr->Type) && rconst && (!LeftSigned || RightSigned)) {
/* Left side is unsigned char, right side is constant. /* Left side is unsigned char, right side is constant.
** Determine the minimum and maximum values ** Determine the minimum and maximum values
@@ -2923,7 +2923,7 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */
** since the right side constant is in a valid range. ** since the right side constant is in a valid range.
*/ */
flags |= (CF_CHAR | CF_FORCECHAR); flags |= (CF_CHAR | CF_FORCECHAR);
if (!LeftSigned) { if (!LeftSigned || !RightSigned) {
flags |= CF_UNSIGNED; flags |= CF_UNSIGNED;
} }