authorgravatar for yujiri@disroot.orgEvin Yulo <yujiri@disroot.org> 2023-05-22 15:45:39-04:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2023-05-29 13:01:11+03:00
log235b776d619d64dee62fc88e85bd53421cce37f7
tree8804f7c206a0f7f0f34f215a6a5e149305b75812
parentab37ab33ce94b4fb6536bcc2f3981c0cc257c9f0

fix #15778: Binary operations on empty vectors crash


3 files changed, 27 insertions(+), 0 deletions(-)

src/value.zig+1
...@@ -2208,6 +2208,7 @@ pub const Value = extern union {...@@ -2208,6 +2208,7 @@ pub const Value = extern union {
2208 }2208 }
2209 return true;2209 return true;
2210 },2210 },
2211 .empty_array => return true,
2211 .str_lit => {2212 .str_lit => {
2212 const str_lit = lhs.castTag(.str_lit).?.data;2213 const str_lit = lhs.castTag(.str_lit).?.data;
2213 const bytes = mod.string_literal_bytes.items[str_lit.index..][0..str_lit.len];2214 const bytes = mod.string_literal_bytes.items[str_lit.index..][0..str_lit.len];
test/behavior.zig+1
...@@ -142,6 +142,7 @@ test {...@@ -142,6 +142,7 @@ test {
142 _ = @import("behavior/bugs/13714.zig");142 _ = @import("behavior/bugs/13714.zig");
143 _ = @import("behavior/bugs/13785.zig");143 _ = @import("behavior/bugs/13785.zig");
144 _ = @import("behavior/bugs/14854.zig");144 _ = @import("behavior/bugs/14854.zig");
145 _ = @import("behavior/bugs/15778.zig");
145 _ = @import("behavior/byteswap.zig");146 _ = @import("behavior/byteswap.zig");
146 _ = @import("behavior/byval_arg_var.zig");147 _ = @import("behavior/byval_arg_var.zig");
147 _ = @import("behavior/call.zig");148 _ = @import("behavior/call.zig");
test/behavior/bugs/15778.zig created+25
...@@ -0,0 +1,25 @@
1const builtin = @import("builtin");
2
3test {
4 if (builtin.zig_backend == .stage2_x86) return error.SkipZigTest; // TODO
5 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
6 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
7 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; // TODO
8 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
9 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; // TODO
10 const a = @Vector(0, i32){};
11 const b = @Vector(0, i32){};
12 _ = a + b;
13}
14
15test {
16 if (builtin.zig_backend == .stage2_x86) return error.SkipZigTest; // TODO
17 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
18 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
19 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; // TODO
20 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
21 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; // TODO
22 const a = @Vector(0, f32){};
23 const b = @Vector(0, f32){};
24 _ = a - b;
25}