zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit b45d2968e51cd22650b019f668056333337513e9 (tree)
parent 97f36d93f4766a8d225d19665309e825cdef72bf
Author: LemonBoy <thatlemon@gmail.com>
Date:   Sat,  5 Dec 2020 19:16:36 +0100

Add some test cases for the previous commits

Diffstat:
Mtest/runtime_safety.zig | 79+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 79 insertions(+), 0 deletions(-)

diff --git a/test/runtime_safety.zig b/test/runtime_safety.zig @@ -4,6 +4,85 @@ pub fn addCases(cases: *tests.CompareOutputContext) void { { const check_panic_msg = \\pub fn panic(message: []const u8, stack_trace: ?*@import("builtin").StackTrace) noreturn { + \\ if (std.mem.eql(u8, message, "reached unreachable code")) { + \\ std.process.exit(126); // good + \\ } + \\ std.process.exit(0); // test failed + \\} + ; + + cases.addRuntimeSafety("switch on corrupted enum value", + \\const std = @import("std"); + ++ check_panic_msg ++ + \\const E = enum(u32) { + \\ X = 1, + \\}; + \\pub fn main() void { + \\ var e: E = undefined; + \\ @memset(@ptrCast([*]u8, &e), 0x55, @sizeOf(E)); + \\ switch (e) { + \\ .X => @breakpoint(), + \\ } + \\} + ); + + cases.addRuntimeSafety("switch on corrupted union value", + \\const std = @import("std"); + ++ check_panic_msg ++ + \\const U = union(enum(u32)) { + \\ X: u8, + \\}; + \\pub fn main() void { + \\ var u: U = undefined; + \\ @memset(@ptrCast([*]u8, &u), 0x55, @sizeOf(U)); + \\ switch (u) { + \\ .X => @breakpoint(), + \\ } + \\} + ); + } + + { + const check_panic_msg = + \\pub fn panic(message: []const u8, stack_trace: ?*@import("builtin").StackTrace) noreturn { + \\ if (std.mem.eql(u8, message, "invalid enum value")) { + \\ std.process.exit(126); // good + \\ } + \\ std.process.exit(0); // test failed + \\} + ; + + cases.addRuntimeSafety("@tagName on corrupted enum value", + \\const std = @import("std"); + ++ check_panic_msg ++ + \\const E = enum(u32) { + \\ X = 1, + \\}; + \\pub fn main() void { + \\ var e: E = undefined; + \\ @memset(@ptrCast([*]u8, &e), 0x55, @sizeOf(E)); + \\ var n = @tagName(e); + \\} + ); + + cases.addRuntimeSafety("@tagName on corrupted union value", + \\const std = @import("std"); + ++ check_panic_msg ++ + \\const U = union(enum(u32)) { + \\ X: u8, + \\}; + \\pub fn main() void { + \\ var u: U = undefined; + \\ @memset(@ptrCast([*]u8, &u), 0x55, @sizeOf(U)); + \\ var t: @TagType(U) = u; + \\ var n = @tagName(t); + \\} + ); + } + + { + const check_panic_msg = + \\pub fn panic(message: []const u8, stack_trace: ?*@import("builtin").StackTrace) noreturn { \\ if (std.mem.eql(u8, message, "index out of bounds")) { \\ std.process.exit(126); // good \\ }