Commit 10016e0368
Changed files (2)
src
test
src/Sema.zig
@@ -13247,32 +13247,20 @@ fn zirShl(
}
break :rs rhs_src;
};
-
- const val = switch (air_tag) {
+ const val = if (scalar_ty.zigTypeTag(mod) == .ComptimeInt)
+ try lhs_val.shl(rhs_val, lhs_ty, sema.arena, mod)
+ else switch (air_tag) {
.shl_exact => val: {
const shifted = try lhs_val.shlWithOverflow(rhs_val, lhs_ty, sema.arena, mod);
- if (scalar_ty.zigTypeTag(mod) == .ComptimeInt) {
- break :val shifted.wrapped_result;
- }
if (shifted.overflow_bit.compareAllWithZero(.eq, mod)) {
break :val shifted.wrapped_result;
}
return sema.fail(block, src, "operation caused overflow", .{});
},
-
- .shl_sat => if (scalar_ty.zigTypeTag(mod) == .ComptimeInt)
- try lhs_val.shl(rhs_val, lhs_ty, sema.arena, mod)
- else
- try lhs_val.shlSat(rhs_val, lhs_ty, sema.arena, mod),
-
- .shl => if (scalar_ty.zigTypeTag(mod) == .ComptimeInt)
- try lhs_val.shl(rhs_val, lhs_ty, sema.arena, mod)
- else
- try lhs_val.shlTrunc(rhs_val, lhs_ty, sema.arena, mod),
-
+ .shl_sat => try lhs_val.shlSat(rhs_val, lhs_ty, sema.arena, mod),
+ .shl => try lhs_val.shlTrunc(rhs_val, lhs_ty, sema.arena, mod),
else => unreachable,
};
-
return Air.internedToRef(val.toIntern());
} else lhs_src;
test/cases/shl_exact_comptime_int_lhs.zig
@@ -0,0 +1,6 @@
+export fn entry() void {
+ if (@shlExact(1, 1) != 2) @compileError("should be 2");
+}
+
+// compile
+// output_mode=Obj