diff options
| author | Veikka Tuominen <git@vexu.eu> | 2024-01-02 17:37:21 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-01-02 17:37:21 +0200 |
| commit | d9d840a33ac8abb0e616de862f592821a7f4a35e (patch) | |
| tree | dd17b4f37cf2b08816af8a99159e5630c6268b35 /test | |
| parent | a04d4330945565b8d6f298ace993f6954c42d0f3 (diff) | |
| parent | 41d5aa1b365516c5f1bad63bfa3bdd7ad0ba6842 (diff) | |
| download | zig-d9d840a33ac8abb0e616de862f592821a7f4a35e.tar.gz zig-d9d840a33ac8abb0e616de862f592821a7f4a35e.zip | |
Merge pull request #18410 from dweiller/by-length-slice-bug
sema: add compile error for OOB by-length slice of array
Diffstat (limited to 'test')
| -rw-r--r-- | test/cases/compile_errors/slice_of_array_by-length_oversized.zig | 19 | ||||
| -rw-r--r-- | test/cases/safety/array slice by-length oversized.zig | 21 |
2 files changed, 40 insertions, 0 deletions
diff --git a/test/cases/compile_errors/slice_of_array_by-length_oversized.zig b/test/cases/compile_errors/slice_of_array_by-length_oversized.zig new file mode 100644 index 0000000000..e482197d1a --- /dev/null +++ b/test/cases/compile_errors/slice_of_array_by-length_oversized.zig @@ -0,0 +1,19 @@ +export fn entry1() void { + var buf: [5]u8 = undefined; + var a: u32 = 6; + _ = &a; + _ = buf[a..][0..10]; +} + +export fn entry2() void { + var buf: [5]u8 = undefined; + const a: u32 = 6; + _ = buf[a..][0..10]; +} + +// error +// backend=stage2 +// target=native +// +// :5:21: error: length 10 out of bounds for array of length 5 +// :11:21: error: length 10 out of bounds for array of length 5 diff --git a/test/cases/safety/array slice by-length oversized.zig b/test/cases/safety/array slice by-length oversized.zig new file mode 100644 index 0000000000..a8b33e428a --- /dev/null +++ b/test/cases/safety/array slice by-length oversized.zig @@ -0,0 +1,21 @@ +const std = @import("std"); + +pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn { + _ = stack_trace; + if (std.mem.eql(u8, message, "index out of bounds: index 12, len 5")) { + std.process.exit(0); + } + std.process.exit(1); +} + +pub fn main() !void { + var buf: [5]u8 = undefined; + var a: u32 = 6; + _ = &a; + _ = buf[a..][0..a]; + return error.TestFailed; +} + +// run +// backend=llvm +// target=native |
