zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit b66247c97af3deaa190d1ca8297166f932b022ff (tree)
parent 69e2cac0d349cc32d4ead73541e18d1f72aac729
Author: Xavier Bouchoux <xavierb@gmail.com>
Date:   Fri, 10 Jun 2022 22:26:19 +0000

stage2: coerce tuple to vector

Diffstat:
Msrc/Sema.zig | 5+++++
Mtest/behavior/vector.zig | 25+++++++++++++++++++++++++
2 files changed, 30 insertions(+), 0 deletions(-)

diff --git a/src/Sema.zig b/src/Sema.zig @@ -19988,6 +19988,11 @@ fn coerce( }, .Vector => switch (inst_ty.zigTypeTag()) { .Array, .Vector => return sema.coerceArrayLike(block, dest_ty, dest_ty_src, inst, inst_src), + .Struct => { + if (inst_ty.isTuple()) { + return sema.coerceTupleToArray(block, dest_ty, dest_ty_src, inst, inst_src); + } + }, .Undefined => { return sema.addConstUndef(dest_ty); }, diff --git a/test/behavior/vector.zig b/test/behavior/vector.zig @@ -167,6 +167,31 @@ test "array to vector" { comptime try S.doTheTest(); } +test "tuple to vector" { + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO + + const S = struct { + fn doTheTest() !void { + const Vec3 = @Vector(3, i32); + var v: Vec3 = .{ 1, 0, 0 }; + for ([_]Vec3{ .{ 0, 1, 0 }, .{ 0, 0, 1 } }) |it| { + v += it; + } + + try std.testing.expectEqual(v, Vec3{ 1, 1, 1 }); + if (builtin.zig_backend != .stage1) { + try std.testing.expectEqual(v, .{ 1, 1, 1 }); + } + } + }; + try S.doTheTest(); + comptime try S.doTheTest(); +} + test "vector casts of sizes not divisible by 8" { if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO