diff --git a/tccgen.c b/tccgen.c index 26a57816..d27bdbaa 100644 --- a/tccgen.c +++ b/tccgen.c @@ -1679,7 +1679,9 @@ ST_FUNC void gen_op(int op) tcc_error("invalid operands for binary operation"); goto std_op; } else if (op == TOK_SHR || op == TOK_SAR || op == TOK_SHL) { - t = (bt1 == VT_LLONG ? VT_LLONG : VT_INT) | (t1 & VT_UNSIGNED); + t = bt1 == VT_LLONG ? VT_LLONG : VT_INT; + if ((t1 & (VT_BTYPE | VT_UNSIGNED)) == (t | VT_UNSIGNED)) + t |= VT_UNSIGNED; goto std_op; } else if (bt1 == VT_LLONG || bt2 == VT_LLONG) { /* cast to biggest op */