authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-12-26 15:26:27+02:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-12-26 15:26:27+02:00
log3535c4b3b67a3c325ff8040477e35b9b1415d7ae
tree4e48577689f3c6762fe85c6c8b0f1649112f6977
parentcf822c6ddd7e56b248ab217d38907aad38935b2f

Sema: fix elem ptr type of vector in slice

Closes #14071

2 files changed, 17 insertions(+), 1 deletions(-)

src/Sema.zig+1-1
...@@ -33069,7 +33069,7 @@ fn elemPtrType(sema: *Sema, ptr_ty: Type, offset: ?usize) !Type {...@@ -33069,7 +33069,7 @@ fn elemPtrType(sema: *Sema, ptr_ty: Type, offset: ?usize) !Type {
33069 host_size: u16 = 0,33069 host_size: u16 = 0,
33070 alignment: u32 = 0,33070 alignment: u32 = 0,
33071 vector_index: VI = .none,33071 vector_index: VI = .none,
33072 } = if (parent_ty.tag() == .vector) blk: {33072 } = if (parent_ty.tag() == .vector and ptr_info.size == .One) blk: {
33073 const elem_bits = elem_ty.bitSize(target);33073 const elem_bits = elem_ty.bitSize(target);
33074 if (elem_bits == 0) break :blk .{};33074 if (elem_bits == 0) break :blk .{};
33075 const is_packed = elem_bits < 8 or !std.math.isPowerOfTwo(elem_bits);33075 const is_packed = elem_bits < 8 or !std.math.isPowerOfTwo(elem_bits);
test/behavior/vector.zig+16
...@@ -1261,3 +1261,19 @@ test "store packed vector element" {...@@ -1261,3 +1261,19 @@ test "store packed vector element" {
1261 v[0] = 0;1261 v[0] = 0;
1262 try expectEqual(@Vector(4, u1){ 0, 1, 1, 1 }, v);1262 try expectEqual(@Vector(4, u1){ 0, 1, 1, 1 }, v);
1263}1263}
1264
1265test "store to vector in slice" {
1266 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1267 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1268 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1269 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
1270
1271 var v = [_]@Vector(3, f32){
1272 .{ 1, 1, 1 },
1273 .{ 0, 0, 0 },
1274 };
1275 var s: []@Vector(3, f32) = &v;
1276 var i: usize = 1;
1277 s[i] = s[0];
1278 try expectEqual(v[1], v[0]);
1279}