authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-02-18 19:17:05-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-02-18 19:20:19-07:00
log15d767c62154859724dbf63dd0fdfa4195e33256
tree486d1bba7bf8c069b175bb2e5dea5e6b4870fc8f
parent40c4c25e2b5e2242c3180cd8564dc22697bf363f

add safety test cases for multi-object for loops


2 files changed, 48 insertions(+), 0 deletions(-)

test/cases/safety/for_len_mismatch.zig created+24
...@@ -0,0 +1,24 @@
1const std = @import("std");
2
3pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;
5 if (std.mem.eql(u8, message, "for loop over objects with non-equal lengths")) {
6 std.process.exit(0);
7 }
8 std.process.exit(1);
9}
10
11pub fn main() !void {
12 var runtime_i: usize = 1;
13 var j: usize = 3;
14 var slice = "too long";
15 for (runtime_i..j, slice) |a, b| {
16 _ = a;
17 _ = b;
18 return error.TestFailed;
19 }
20 return error.TestFailed;
21}
22// run
23// backend=llvm
24// target=native
test/cases/safety/for_len_mismatch_three.zig created+24
...@@ -0,0 +1,24 @@
1const std = @import("std");
2
3pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;
5 if (std.mem.eql(u8, message, "for loop over objects with non-equal lengths")) {
6 std.process.exit(0);
7 }
8 std.process.exit(1);
9}
10
11pub fn main() !void {
12 var slice: []const u8 = "hello";
13 for (10..20, slice, 20..30) |a, b, c| {
14 _ = a;
15 _ = b;
16 _ = c;
17 return error.TestFailed;
18 }
19 return error.TestFailed;
20}
21// run
22// backend=llvm
23// target=native
24