authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-06-19 15:18:51-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-06-19 15:18:51-04:00
loge36680d3bd08fceb3e976edeafae60ce6d577342
tree60ca93229fabd17136dd6aa2389ba9d2c95ed6b7
parentb588a803bf4493d2fd1892fe172b9ce8cfb0ca30
signaturelock-open Commit is signed but in an unrecognized format.

fix detection of unable to evaluate constant expression


3 files changed, 20 insertions(+), 20 deletions(-)

src/ir.cpp+1-1
...@@ -8647,7 +8647,7 @@ static ConstExprValue *ir_exec_const_result(CodeGen *codegen, IrExecutable *exec...@@ -8647,7 +8647,7 @@ static ConstExprValue *ir_exec_const_result(CodeGen *codegen, IrExecutable *exec
8647 return &codegen->invalid_instruction->value;8647 return &codegen->invalid_instruction->value;
8648 }8648 }
8649 return &value->value;8649 return &value->value;
8650 } else if (ir_has_side_effects(instruction)) {8650 } else if (ir_has_side_effects(instruction) && !instr_is_comptime(instruction)) {
8651 exec_add_error_node(codegen, exec, instruction->source_node,8651 exec_add_error_node(codegen, exec, instruction->source_node,
8652 buf_sprintf("unable to evaluate constant expression"));8652 buf_sprintf("unable to evaluate constant expression"));
8653 return &codegen->invalid_instruction->value;8653 return &codegen->invalid_instruction->value;
test/stage1/behavior.zig+1-1
...@@ -40,7 +40,7 @@ comptime {...@@ -40,7 +40,7 @@ comptime {
40 _ = @import("behavior/bugs/920.zig");40 _ = @import("behavior/bugs/920.zig");
41 _ = @import("behavior/byval_arg_var.zig");41 _ = @import("behavior/byval_arg_var.zig");
42 //_ = @import("behavior/cancel.zig");42 //_ = @import("behavior/cancel.zig");
43 _ = @import("behavior/cast.zig"); // TODO43 _ = @import("behavior/cast.zig");
44 _ = @import("behavior/const_slice_child.zig");44 _ = @import("behavior/const_slice_child.zig");
45 //_ = @import("behavior/coroutine_await_struct.zig");45 //_ = @import("behavior/coroutine_await_struct.zig");
46 //_ = @import("behavior/coroutines.zig");46 //_ = @import("behavior/coroutines.zig");
test/stage1/behavior/cast.zig+18-18
...@@ -165,10 +165,10 @@ fn castToOptionalSlice() ?[]const u8 {...@@ -165,10 +165,10 @@ fn castToOptionalSlice() ?[]const u8 {
165 return "hi";165 return "hi";
166}166}
167167
168//test "implicitly cast from [0]T to anyerror![]T" {168test "implicitly cast from [0]T to anyerror![]T" {
169// testCastZeroArrayToErrSliceMut();169 testCastZeroArrayToErrSliceMut();
170// comptime testCastZeroArrayToErrSliceMut();170 comptime testCastZeroArrayToErrSliceMut();
171//}171}
172172
173fn testCastZeroArrayToErrSliceMut() void {173fn testCastZeroArrayToErrSliceMut() void {
174 expect((gimmeErrOrSlice() catch unreachable).len == 0);174 expect((gimmeErrOrSlice() catch unreachable).len == 0);
...@@ -178,20 +178,20 @@ fn gimmeErrOrSlice() anyerror![]u8 {...@@ -178,20 +178,20 @@ fn gimmeErrOrSlice() anyerror![]u8 {
178 return [_]u8{};178 return [_]u8{};
179}179}
180180
181//test "peer type resolution: [0]u8, []const u8, and anyerror![]u8" {181test "peer type resolution: [0]u8, []const u8, and anyerror![]u8" {
182// {182 {
183// var data = "hi";183 var data = "hi";
184// const slice = data[0..];184 const slice = data[0..];
185// expect((try peerTypeEmptyArrayAndSliceAndError(true, slice)).len == 0);185 expect((try peerTypeEmptyArrayAndSliceAndError(true, slice)).len == 0);
186// expect((try peerTypeEmptyArrayAndSliceAndError(false, slice)).len == 1);186 expect((try peerTypeEmptyArrayAndSliceAndError(false, slice)).len == 1);
187// }187 }
188// comptime {188 comptime {
189// var data = "hi";189 var data = "hi";
190// const slice = data[0..];190 const slice = data[0..];
191// expect((try peerTypeEmptyArrayAndSliceAndError(true, slice)).len == 0);191 expect((try peerTypeEmptyArrayAndSliceAndError(true, slice)).len == 0);
192// expect((try peerTypeEmptyArrayAndSliceAndError(false, slice)).len == 1);192 expect((try peerTypeEmptyArrayAndSliceAndError(false, slice)).len == 1);
193// }193 }
194//}194}
195fn peerTypeEmptyArrayAndSliceAndError(a: bool, slice: []u8) anyerror![]u8 {195fn peerTypeEmptyArrayAndSliceAndError(a: bool, slice: []u8) anyerror![]u8 {
196 if (a) {196 if (a) {
197 return [_]u8{};197 return [_]u8{};