diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2025-09-20 18:46:27 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2025-09-20 18:51:26 -0700 |
| commit | 500afbf0760d5de7598a4988d1a4b08c21b2dc29 (patch) | |
| tree | f940b22f0010140b59f73c87f65ea91f6fbfd978 /test/behavior/array.zig | |
| parent | ed7ff0b693037078f451a7c6c1124611060f4892 (diff) | |
| download | zig-500afbf0760d5de7598a4988d1a4b08c21b2dc29.tar.gz zig-500afbf0760d5de7598a4988d1a4b08c21b2dc29.zip | |
add behavior test: resist alias of explicit copy...
...of array passed as arg
closes #22906
Diffstat (limited to 'test/behavior/array.zig')
| -rw-r--r-- | test/behavior/array.zig | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/test/behavior/array.zig b/test/behavior/array.zig index 741e9505b0..b28ee267c2 100644 --- a/test/behavior/array.zig +++ b/test/behavior/array.zig @@ -1125,3 +1125,24 @@ test "splat with an error union or optional result type" { _ = try S.doTest(@Vector(4, u32)); _ = try S.doTest([4]u32); } + +test "resist alias of explicit copy of array passed as arg" { + const S = struct { + const Thing = [1]u32; + + fn destroy_and_replace(box_b: *Thing, a: Thing, box_a: *Thing) void { + box_a.* = undefined; + box_b.* = a; + } + }; + + var buf_a: S.Thing = .{1234}; + var buf_b: S.Thing = .{5678}; + const box_a = &buf_a; + const box_b = &buf_b; + + const a = box_a.*; // explicit copy + S.destroy_and_replace(box_b, a, box_a); + + try expect(buf_b[0] == 1234); +} |
