Commit 15d767c621

Andrew Kelley <andrew@ziglang.org>
2023-02-19 03:17:05
add safety test cases for multi-object for loops
1 parent 40c4c25
Changed files (2)
test/cases/safety/for_len_mismatch.zig
@@ -0,0 +1,24 @@
+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, "for loop over objects with non-equal lengths")) {
+        std.process.exit(0);
+    }
+    std.process.exit(1);
+}
+
+pub fn main() !void {
+    var runtime_i: usize = 1;
+    var j: usize = 3;
+    var slice = "too long";
+    for (runtime_i..j, slice) |a, b| {
+        _ = a;
+        _ = b;
+        return error.TestFailed;
+    }
+    return error.TestFailed;
+}
+// run
+// backend=llvm
+// target=native
test/cases/safety/for_len_mismatch_three.zig
@@ -0,0 +1,24 @@
+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, "for loop over objects with non-equal lengths")) {
+        std.process.exit(0);
+    }
+    std.process.exit(1);
+}
+
+pub fn main() !void {
+    var slice: []const u8 = "hello";
+    for (10..20, slice, 20..30) |a, b, c| {
+        _ = a;
+        _ = b;
+        _ = c;
+        return error.TestFailed;
+    }
+    return error.TestFailed;
+}
+// run
+// backend=llvm
+// target=native
+