mirror of
https://github.com/ziglang/zig.git
synced 2024-11-27 07:32:44 +00:00
Sat shl neg rhs (#9949)
* saturating shl - check for negative rhs at comptime - adds expected compile_errors case for negative rhs * add expected compile error for sat shl assign
This commit is contained in:
parent
411e9ca4ad
commit
16ac034a32
@ -10407,6 +10407,14 @@ static Stage1AirInst *ir_analyze_bin_op_math(IrAnalyze *ira, Stage1ZirInstBinOp
|
||||
return ira->codegen->invalid_inst_gen;
|
||||
}
|
||||
}
|
||||
} else if (op_id == IrBinOpShlSat) {
|
||||
if (op2_val->data.x_bigint.is_negative) {
|
||||
Buf *val_buf = buf_alloc();
|
||||
bigint_append_buf(val_buf, &op2_val->data.x_bigint, 10);
|
||||
ir_add_error(ira, casted_op2,
|
||||
buf_sprintf("shift by negative value %s", buf_ptr(val_buf)));
|
||||
return ira->codegen->invalid_inst_gen;
|
||||
}
|
||||
}
|
||||
|
||||
return ir_analyze_math_op(ira, instruction->base.scope, instruction->base.source_node, resolved_type, op1_val, op_id, op2_val);
|
||||
|
@ -8869,6 +8869,25 @@ pub fn addCases(ctx: *TestContext) !void {
|
||||
"error: invalid operands to binary expression: 'f32' and 'f32'",
|
||||
});
|
||||
|
||||
ctx.objErrStage1("saturating shl does not allow negative rhs at comptime",
|
||||
\\pub fn main() !void {
|
||||
\\ _ = @as(i32, 1) <<| @as(i32, -2);
|
||||
\\}
|
||||
, &[_][]const u8{
|
||||
"error: shift by negative value -2",
|
||||
});
|
||||
|
||||
ctx.objErrStage1("saturating shl assign does not allow negative rhs at comptime",
|
||||
\\pub fn main() !void {
|
||||
\\ comptime {
|
||||
\\ var x = @as(i32, 1);
|
||||
\\ x <<|= @as(i32, -2);
|
||||
\\ }
|
||||
\\}
|
||||
, &[_][]const u8{
|
||||
"error: shift by negative value -2",
|
||||
});
|
||||
|
||||
ctx.objErrStage1("undeclared identifier in unanalyzed branch",
|
||||
\\export fn a() void {
|
||||
\\ if (false) {
|
||||
|
Loading…
Reference in New Issue
Block a user