From 3535c4b3b67a3c325ff8040477e35b9b1415d7ae Mon Sep 17 00:00:00 2001 From: Veikka Tuominen Date: Mon, 26 Dec 2022 15:26:27 +0200 Subject: [PATCH] Sema: fix elem ptr type of vector in slice Closes #14071 --- src/Sema.zig | 2 +- test/behavior/vector.zig | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/Sema.zig b/src/Sema.zig index 2b4ef94a8f..413621dd5c 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -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); diff --git a/test/behavior/vector.zig b/test/behavior/vector.zig index 322142d8fc..926c2f8f3e 100644 --- a/test/behavior/vector.zig +++ b/test/behavior/vector.zig @@ -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]); +}