Sema: fix elem ptr type of vector in slice

Closes #14071
This commit is contained in:
Veikka Tuominen 2022-12-26 15:26:27 +02:00
parent cf822c6ddd
commit 3535c4b3b6
2 changed files with 17 additions and 1 deletions

View File

@ -33069,7 +33069,7 @@ fn elemPtrType(sema: *Sema, ptr_ty: Type, offset: ?usize) !Type {
host_size: u16 = 0,
alignment: u32 = 0,
vector_index: VI = .none,
} = if (parent_ty.tag() == .vector) blk: {
} = if (parent_ty.tag() == .vector and ptr_info.size == .One) blk: {
const elem_bits = elem_ty.bitSize(target);
if (elem_bits == 0) break :blk .{};
const is_packed = elem_bits < 8 or !std.math.isPowerOfTwo(elem_bits);

View File

@ -1261,3 +1261,19 @@ test "store packed vector element" {
v[0] = 0;
try expectEqual(@Vector(4, u1){ 0, 1, 1, 1 }, v);
}
test "store to vector in slice" {
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
var v = [_]@Vector(3, f32){
.{ 1, 1, 1 },
.{ 0, 0, 0 },
};
var s: []@Vector(3, f32) = &v;
var i: usize = 1;
s[i] = s[0];
try expectEqual(v[1], v[0]);
}