| author | |
| committer | |
| log | 4c9d06416c1f0e4e7bf5139a705c50ad18f9c39a |
| tree | 8ef3477cf5c71ca4f0aa5bf93c20794616379d8f |
| parent | 175589fc713d0c706812508fb6bb566b77423b83 |
| parent | eab71c7c86d1dfc7e2016387c9edbeae5dcfcbf7 |
Reviewed-on: https://codeberg.org/ziglang/zig/pulls/35918
Reviewed-by: Justus Klausecker <justusk@noreply.codeberg.org>2 files changed, 50 insertions(+), 0 deletions(-)
test/behavior.zig+1| ... | @@ -60,6 +60,7 @@ test { | ... | @@ -60,6 +60,7 @@ test { |
| 60 | _ = @import("behavior/nan.zig"); | 60 | _ = @import("behavior/nan.zig"); |
| 61 | _ = @import("behavior/null.zig"); | 61 | _ = @import("behavior/null.zig"); |
| 62 | _ = @import("behavior/optional.zig"); | 62 | _ = @import("behavior/optional.zig"); |
| 63 | _ = @import("behavior/overlapping_assign.zig"); | ||
| 63 | _ = @import("behavior/packed-struct.zig"); | 64 | _ = @import("behavior/packed-struct.zig"); |
| 64 | _ = @import("behavior/packed_struct_explicit_backing_int.zig"); | 65 | _ = @import("behavior/packed_struct_explicit_backing_int.zig"); |
| 65 | _ = @import("behavior/packed-union.zig"); | 66 | _ = @import("behavior/packed-union.zig"); |
test/behavior/overlapping_assign.zig created+49| ... | @@ -0,0 +1,49 @@ | ||
| 1 | const std = @import("std"); | ||
| 2 | const expect = std.testing.expect; | ||
| 3 | |||
| 4 | test "assignment to overlapping memory" { | ||
| 5 | try theTest(); | ||
| 6 | try comptime theTest(); | ||
| 7 | } | ||
| 8 | |||
| 9 | fn theTest() !void { | ||
| 10 | var a1: [3]usize = .{ 0, 1, 2 }; | ||
| 11 | const b1: [3]usize = .{ 0, 0, 1 }; | ||
| 12 | a1[1..3].* = a1[0..2].*; | ||
| 13 | for (a1, b1) |a, b| { | ||
| 14 | try expect(a == b); | ||
| 15 | } | ||
| 16 | |||
| 17 | var a2: [3]usize = .{ 0, 1, 2 }; | ||
| 18 | const b2: [3]usize = .{ 1, 2, 2 }; | ||
| 19 | a2[0..2].* = a2[1..3].*; | ||
| 20 | for (a2, b2) |a, b| { | ||
| 21 | try expect(a == b); | ||
| 22 | } | ||
| 23 | |||
| 24 | var a3: [16]u8 = .{ | ||
| 25 | 0, 1, 2, 3, 4, 5, 6, 7, | ||
| 26 | 8, 9, 10, 11, 12, 13, 14, 15, | ||
| 27 | }; | ||
| 28 | const b3: [16]u8 = .{ | ||
| 29 | 0, 0, 1, 2, 3, 4, 5, 6, | ||
| 30 | 7, 8, 9, 10, 11, 12, 13, 14, | ||
| 31 | }; | ||
| 32 | a3[1..16].* = a3[0..15].*; | ||
| 33 | for (a3, b3) |a, b| { | ||
| 34 | try expect(a == b); | ||
| 35 | } | ||
| 36 | |||
| 37 | var a4: [16]u8 = .{ | ||
| 38 | 0, 1, 2, 3, 4, 5, 6, 7, | ||
| 39 | 8, 9, 10, 11, 12, 13, 14, 15, | ||
| 40 | }; | ||
| 41 | const b4: [16]u8 = .{ | ||
| 42 | 1, 2, 3, 4, 5, 6, 7, 8, | ||
| 43 | 9, 10, 11, 12, 13, 14, 15, 15, | ||
| 44 | }; | ||
| 45 | a4[0..15].* = a4[1..16].*; | ||
| 46 | for (a4, b4) |a, b| { | ||
| 47 | try expect(a == b); | ||
| 48 | } | ||
| 49 | } | ||