diff --git a/src/Translator.zig b/src/Translator.zig index 80ddd5c..2aed9a8 100644 --- a/src/Translator.zig +++ b/src/Translator.zig @@ -2677,7 +2677,7 @@ fn transShiftExpr(t: *Translator, scope: *Scope, bin: Node.Binary, op_id: ZigTag // lhs >> @intCast(rh) const lhs = try t.transExpr(scope, bin.lhs, .used); - const rhs = try t.transExprCoercing(scope, bin.rhs, .used); + const rhs = try t.transExpr(scope, bin.rhs, .used); const rhs_casted = try ZigTag.int_cast.create(t.arena, rhs); return t.createBinOpNode(op_id, lhs, rhs_casted); diff --git a/test/cases/translate/bitshift.c b/test/cases/translate/bitshift.c index f5adde0..319fb5c 100644 --- a/test/cases/translate/bitshift.c +++ b/test/cases/translate/bitshift.c @@ -5,5 +5,5 @@ int foo(void) { // translate // // pub export fn foo() c_int { -// return (@as(c_int, 1) << @intCast(2)) >> @intCast(1); +// return (@as(c_int, 1) << @intCast(@as(c_int, 2))) >> @intCast(@as(c_int, 1)); // } diff --git a/test/cases/translate/bitshift_with_bitcast.c b/test/cases/translate/bitshift_with_bitcast.c new file mode 100644 index 0000000..9b6262a --- /dev/null +++ b/test/cases/translate/bitshift_with_bitcast.c @@ -0,0 +1,9 @@ +unsigned int bit31() { + return 1u << (31); +} + +// translate +// +// pub export fn bit31() c_uint { +// return @as(c_uint, 1) << @intCast(@as(c_uint, @bitCast(@as(c_int, @as(c_int, 31))))); +// }