Commit e36680d3bd
Changed files (3)
src
test
stage1
behavior
src/ir.cpp
@@ -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;
test/stage1/behavior/cast.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{};
test/stage1/behavior.zig
@@ -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");