fix detection of unable to evaluate constant expression
This commit is contained in:
parent
b588a803bf
commit
e36680d3bd
|
@ -8647,7 +8647,7 @@ static ConstExprValue *ir_exec_const_result(CodeGen *codegen, IrExecutable *exec
|
|||
return &codegen->invalid_instruction->value;
|
||||
}
|
||||
return &value->value;
|
||||
} else if (ir_has_side_effects(instruction)) {
|
||||
} else if (ir_has_side_effects(instruction) && !instr_is_comptime(instruction)) {
|
||||
exec_add_error_node(codegen, exec, instruction->source_node,
|
||||
buf_sprintf("unable to evaluate constant expression"));
|
||||
return &codegen->invalid_instruction->value;
|
||||
|
|
|
@ -40,7 +40,7 @@ comptime {
|
|||
_ = @import("behavior/bugs/920.zig");
|
||||
_ = @import("behavior/byval_arg_var.zig");
|
||||
//_ = @import("behavior/cancel.zig");
|
||||
_ = @import("behavior/cast.zig"); // TODO
|
||||
_ = @import("behavior/cast.zig");
|
||||
_ = @import("behavior/const_slice_child.zig");
|
||||
//_ = @import("behavior/coroutine_await_struct.zig");
|
||||
//_ = @import("behavior/coroutines.zig");
|
||||
|
|
|
@ -165,10 +165,10 @@ fn castToOptionalSlice() ?[]const u8 {
|
|||
return "hi";
|
||||
}
|
||||
|
||||
//test "implicitly cast from [0]T to anyerror![]T" {
|
||||
// testCastZeroArrayToErrSliceMut();
|
||||
// comptime testCastZeroArrayToErrSliceMut();
|
||||
//}
|
||||
test "implicitly cast from [0]T to anyerror![]T" {
|
||||
testCastZeroArrayToErrSliceMut();
|
||||
comptime testCastZeroArrayToErrSliceMut();
|
||||
}
|
||||
|
||||
fn testCastZeroArrayToErrSliceMut() void {
|
||||
expect((gimmeErrOrSlice() catch unreachable).len == 0);
|
||||
|
@ -178,20 +178,20 @@ fn gimmeErrOrSlice() anyerror![]u8 {
|
|||
return [_]u8{};
|
||||
}
|
||||
|
||||
//test "peer type resolution: [0]u8, []const u8, and anyerror![]u8" {
|
||||
// {
|
||||
// var data = "hi";
|
||||
// const slice = data[0..];
|
||||
// expect((try peerTypeEmptyArrayAndSliceAndError(true, slice)).len == 0);
|
||||
// expect((try peerTypeEmptyArrayAndSliceAndError(false, slice)).len == 1);
|
||||
// }
|
||||
// comptime {
|
||||
// var data = "hi";
|
||||
// const slice = data[0..];
|
||||
// expect((try peerTypeEmptyArrayAndSliceAndError(true, slice)).len == 0);
|
||||
// expect((try peerTypeEmptyArrayAndSliceAndError(false, slice)).len == 1);
|
||||
// }
|
||||
//}
|
||||
test "peer type resolution: [0]u8, []const u8, and anyerror![]u8" {
|
||||
{
|
||||
var data = "hi";
|
||||
const slice = data[0..];
|
||||
expect((try peerTypeEmptyArrayAndSliceAndError(true, slice)).len == 0);
|
||||
expect((try peerTypeEmptyArrayAndSliceAndError(false, slice)).len == 1);
|
||||
}
|
||||
comptime {
|
||||
var data = "hi";
|
||||
const slice = data[0..];
|
||||
expect((try peerTypeEmptyArrayAndSliceAndError(true, slice)).len == 0);
|
||||
expect((try peerTypeEmptyArrayAndSliceAndError(false, slice)).len == 1);
|
||||
}
|
||||
}
|
||||
fn peerTypeEmptyArrayAndSliceAndError(a: bool, slice: []u8) anyerror![]u8 {
|
||||
if (a) {
|
||||
return [_]u8{};
|
||||
|
|
Loading…
Reference in New Issue
Block a user