Commit 3535c4b3b6

Veikka Tuominen <git@vexu.eu>
2022-12-26 14:26:27
Sema: fix elem ptr type of vector in slice
Closes #14071
1 parent cf822c6
Changed files (2)
src
test
behavior
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);
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]);
+}