aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authordweiller <4678790+dweiller@users.noreply.github.com>2023-12-30 14:37:35 +1100
committerdweiller <4678790+dweiller@users.noreply.github.com>2023-12-31 15:36:58 +1100
commit17485110589c953aa39de75a9fb75ac415e4f9cd (patch)
treeddfd5113567a2a0896e3b80d7b3fdce24345ffd1 /test
parent4129996211edd30b25c23454520fd78b2a70394b (diff)
downloadzig-17485110589c953aa39de75a9fb75ac415e4f9cd.tar.gz
zig-17485110589c953aa39de75a9fb75ac415e4f9cd.zip
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.zig19
-rw-r--r--test/cases/safety/array slice by-length oversized.zig21
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