diff --git a/compiler/c_generator.mu b/compiler/c_generator.mu index 10ebd69..a3c5f7f 100644 --- a/compiler/c_generator.mu +++ b/compiler/c_generator.mu @@ -1324,6 +1324,14 @@ CGenerator { genLiftingBinaryOperator(c, op, e.lhs, e.rhs, sb, uni) } else if (lhs.ti.flags & TypeFlags.pointer_) != 0 { genBasicBinaryOperator(c, op, e, sb) + } else if lhs.ti == c.tags.char_.ti { + sb.write("((unsigned char)(") + genExpression(c, e.lhs, sb) + sb.write(")) ") + sb.write(op) + sb.write(" ((unsigned char)(") + genExpression(c, e.rhs, sb) + sb.write("))") } else if lhs.ti == c.tags.string_.ti { sb.write("string__compare__(") genExpression(c, e.lhs, sb) diff --git a/compiler/c_generator_builtin.mu b/compiler/c_generator_builtin.mu index b9bc364..6a20e37 100644 --- a/compiler/c_generator_builtin.mu +++ b/compiler/c_generator_builtin.mu @@ -388,7 +388,11 @@ CGenerator { if (from.ti.flags & (TypeFlags.anyPointerExceptTaggedPointer | TypeFlags.char_)) != 0 && (to.ti.flags & TypeFlags.intval) != 0 { rb.write("(") writeTag(rb, to) - rb.write(")(uintptr_t)(") + if (from.ti.flags & (TypeFlags.char_)) != 0 { + rb.write(")(unsigned char)(") + } else { + rb.write(")(uintptr_t)(") + } genExpression(c, e.args[0], rb) rb.write(")") return