diff options
| -rw-r--r-- | src/ir.cpp | 2 | ||||
| -rw-r--r-- | test/stage1/behavior.zig | 2 | ||||
| -rw-r--r-- | test/stage1/behavior/cast.zig | 36 |
3 files changed, 20 insertions, 20 deletions
diff --git a/src/ir.cpp b/src/ir.cpp index 3d125da1a1..6dfaa168ec 100644 --- a/src/ir.cpp +++ b/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; diff --git a/test/stage1/behavior.zig b/test/stage1/behavior.zig index 77fc482ccc..5ad6b94f3f 100644 --- a/test/stage1/behavior.zig +++ b/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"); diff --git a/test/stage1/behavior/cast.zig b/test/stage1/behavior/cast.zig index c148523a72..0a2ffb6c2f 100644 --- a/test/stage1/behavior/cast.zig +++ b/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{}; |
