authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-09-26 17:14:17-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-09-26 17:14:17-07:00
log7f4c0e010d1eaa47533a711c781783e808494083
tree7aef83ef1185994606b4573630e1ed96a5ebee5d
parentdb8c0744767b3d472f9682827a312a8ffed74adf

update safety test cases to new panic API

although they would also pass simply reverted to master branch because I made the deprecated API still work for now (to be removed after 0.14.0 is tagged)

95 files changed, 1129 insertions(+), 270 deletions(-)

lib/std/builtin.zig+16-7
...@@ -762,26 +762,35 @@ pub const TestFn = struct {...@@ -762,26 +762,35 @@ pub const TestFn = struct {
762};762};
763763
764/// Deprecated, use the `Panic` namespace instead.764/// Deprecated, use the `Panic` namespace instead.
765/// To be deleted after 0.14.0 is released.
765pub const PanicFn = fn ([]const u8, ?*StackTrace, ?usize) noreturn;766pub const PanicFn = fn ([]const u8, ?*StackTrace, ?usize) noreturn;
766
767/// Deprecated, use the `Panic` namespace instead.767/// Deprecated, use the `Panic` namespace instead.
768pub const panic: PanicFn = if (@hasDecl(root, "panic"))768/// To be deleted after 0.14.0 is released.
769 root.panic769pub const panic: PanicFn = Panic.call;
770else if (@hasDecl(root, "os") and @hasDecl(root.os, "panic"))
771 root.os.panic
772else
773 Panic.call;
774770
775/// This namespace is used by the Zig compiler to emit various kinds of safety771/// This namespace is used by the Zig compiler to emit various kinds of safety
776/// panics. These can be overridden by making a public `Panic` namespace in the772/// panics. These can be overridden by making a public `Panic` namespace in the
777/// root source file.773/// root source file.
778pub const Panic: type = if (@hasDecl(root, "Panic"))774pub const Panic: type = if (@hasDecl(root, "Panic"))
779 root.Panic775 root.Panic
776else if (@hasDecl(root, "panic")) // Deprecated, use `Panic` instead.
777 DeprecatedPanic
780else if (builtin.zig_backend == .stage2_riscv64)778else if (builtin.zig_backend == .stage2_riscv64)
781 std.debug.SimplePanic // https://github.com/ziglang/zig/issues/21519779 std.debug.SimplePanic // https://github.com/ziglang/zig/issues/21519
782else780else
783 std.debug.FormattedPanic;781 std.debug.FormattedPanic;
784782
783/// To be deleted after 0.14.0 is released.
784const DeprecatedPanic = struct {
785 pub const call = root.panic;
786 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
787 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
788 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
789 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
790 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
791 pub const messages = std.debug.FormattedPanic.messages;
792};
793
785/// To be deleted after zig1.wasm is updated.794/// To be deleted after zig1.wasm is updated.
786pub const panicSentinelMismatch = Panic.sentinelMismatch;795pub const panicSentinelMismatch = Panic.sentinelMismatch;
787/// To be deleted after zig1.wasm is updated.796/// To be deleted after zig1.wasm is updated.
lib/std/debug/SimplePanic.zig+1-1
...@@ -28,7 +28,7 @@ pub fn sentinelMismatch(expected: anytype, found: @TypeOf(expected)) noreturn {...@@ -28,7 +28,7 @@ pub fn sentinelMismatch(expected: anytype, found: @TypeOf(expected)) noreturn {
2828
29pub fn unwrapError(ert: ?*std.builtin.StackTrace, err: anyerror) noreturn {29pub fn unwrapError(ert: ?*std.builtin.StackTrace, err: anyerror) noreturn {
30 _ = ert;30 _ = ert;
31 _ = err;31 _ = &err;
32 call("attempt to unwrap error", null, null);32 call("attempt to unwrap error", null, null);
33}33}
3434
test/cases/compile_errors/panic_has_source_location.zig+2-5
...@@ -6,10 +6,7 @@ export fn foo() void {...@@ -6,10 +6,7 @@ export fn foo() void {
6 @panic("oh no");6 @panic("oh no");
7}7}
88
9pub fn panic(cause: std.builtin.PanicCause, ert: ?*std.builtin.StackTrace, ra: ?usize) noreturn {9pub fn panic(_: []const u8, _: ?*std.builtin.StackTrace, _: ?usize) noreturn {
10 _ = cause;
11 _ = ert;
12 _ = ra;
13 @compileError("panic");10 @compileError("panic");
14}11}
1512
...@@ -17,4 +14,4 @@ pub fn panic(cause: std.builtin.PanicCause, ert: ?*std.builtin.StackTrace, ra: ?...@@ -17,4 +14,4 @@ pub fn panic(cause: std.builtin.PanicCause, ert: ?*std.builtin.StackTrace, ra: ?
17// backend=stage214// backend=stage2
18// target=native15// target=native
19//16//
20// :13:5: error: panic17// :10:5: error: panic
test/cases/safety/@alignCast misaligned.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .incorrect_alignment) {15 if (std.mem.eql(u8, message, "incorrect alignment")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/@asyncCall with too small a frame.zig +11-1
...@@ -1,7 +1,17 @@...@@ -1,7 +1,17 @@
1const std = @import("std");1const std = @import("std");
2const builtin = @import("builtin");2const builtin = @import("builtin");
33
4pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {4pub const Panic = struct {
5 pub const call = panic;
6 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
7 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
8 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
9 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
10 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
11 pub const messages = std.debug.FormattedPanic.messages;
12};
13
14fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
5 _ = message;15 _ = message;
6 _ = stack_trace;16 _ = stack_trace;
7 std.process.exit(0);17 std.process.exit(0);
test/cases/safety/@enumFromInt - no matching tag value.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .invalid_enum_value) {15 if (std.mem.eql(u8, message, "invalid enum value")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/@errorCast error not present in destination.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .invalid_error_code) {15 if (std.mem.eql(u8, message, "invalid error code")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/@errorCast error union casted to disjoint set.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .invalid_error_code) {15 if (std.mem.eql(u8, message, "invalid error code")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/@intCast to u0.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .cast_truncated_data) {15 if (std.mem.eql(u8, message, "integer cast truncated bits")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/@intFromFloat cannot fit - negative out of range.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .integer_part_out_of_bounds) {15 if (std.mem.eql(u8, message, "integer part of floating point value out of bounds")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/@intFromFloat cannot fit - negative to unsigned.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .integer_part_out_of_bounds) {15 if (std.mem.eql(u8, message, "integer part of floating point value out of bounds")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/@intFromFloat cannot fit - positive out of range.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .integer_part_out_of_bounds) {15 if (std.mem.eql(u8, message, "integer part of floating point value out of bounds")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/@ptrFromInt address zero to non-optional byte-aligned pointer.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .cast_to_null) {15 if (std.mem.eql(u8, message, "cast causes pointer to be null")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/@ptrFromInt address zero to non-optional pointer.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .cast_to_null) {15 if (std.mem.eql(u8, message, "cast causes pointer to be null")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/@ptrFromInt with misaligned address.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .incorrect_alignment) {15 if (std.mem.eql(u8, message, "incorrect alignment")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/@tagName on corrupted enum value.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .invalid_enum_value) {15 if (std.mem.eql(u8, message, "invalid enum value")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/@tagName on corrupted union value.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .invalid_enum_value) {15 if (std.mem.eql(u8, message, "invalid enum value")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/array slice sentinel mismatch vector.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .sentinel_mismatch_other) {15 if (std.mem.eql(u8, message, "sentinel mismatch: expected { 0, 0 }, found { 4, 4 }")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/array slice sentinel mismatch.zig +13-8
...@@ -1,14 +1,19 @@...@@ -1,14 +1,19 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 switch (cause) {15 if (std.mem.eql(u8, message, "sentinel mismatch: expected 0, found 4")) {
6 .sentinel_mismatch_usize => |info| {16 std.process.exit(0);
7 if (info.expected == 0 and info.found == 4) {
8 std.process.exit(0);
9 }
10 },
11 else => {},
12 }17 }
13 std.process.exit(1);18 std.process.exit(1);
14}19}
test/cases/safety/bad union field access.zig +13-10
...@@ -1,16 +1,19 @@...@@ -1,16 +1,19 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 switch (cause) {15 if (std.mem.eql(u8, message, "access of union field 'float' while field 'int' is active")) {
6 .inactive_union_field => |info| {16 std.process.exit(0);
7 if (std.mem.eql(u8, info.active, "int") and
8 std.mem.eql(u8, info.accessed, "float"))
9 {
10 std.process.exit(0);
11 }
12 },
13 else => {},
14 }17 }
15 std.process.exit(1);18 std.process.exit(1);
16}19}
test/cases/safety/calling panic.zig +13-8
...@@ -1,14 +1,19 @@...@@ -1,14 +1,19 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 switch (cause) {15 if (std.mem.eql(u8, message, "oh no")) {
6 .explicit_call => |message| {16 std.process.exit(0);
7 if (std.mem.eql(u8, message, "oh no")) {
8 std.process.exit(0);
9 }
10 },
11 else => {},
12 }17 }
13 std.process.exit(1);18 std.process.exit(1);
14}19}
test/cases/safety/cast []u8 to bigger slice of wrong size.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .exact_division_remainder) {15 if (std.mem.eql(u8, message, "exact division produced remainder")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/cast integer to global error and no code matches.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .invalid_error_code) {15 if (std.mem.eql(u8, message, "invalid error code")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/empty slice with sentinel out of bounds.zig +13-8
...@@ -1,14 +1,19 @@...@@ -1,14 +1,19 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 switch (cause) {15 if (std.mem.eql(u8, message, "index out of bounds: index 1, len 0")) {
6 .index_out_of_bounds => |info| {16 std.process.exit(0);
7 if (info.index == 1 and info.len == 0) {
8 std.process.exit(0);
9 }
10 },
11 else => {},
12 }17 }
13 std.process.exit(1);18 std.process.exit(1);
14}19}
test/cases/safety/exact division failure - vectors.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .exact_division_remainder) {15 if (std.mem.eql(u8, message, "exact division produced remainder")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/exact division failure.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .exact_division_remainder) {15 if (std.mem.eql(u8, message, "exact division produced remainder")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/for_len_mismatch.zig+12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .for_len_mismatch) {15 if (std.mem.eql(u8, message, "for loop over objects with non-equal lengths")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/for_len_mismatch_three.zig+12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .for_len_mismatch) {15 if (std.mem.eql(u8, message, "for loop over objects with non-equal lengths")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/ignored expression integer overflow.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .integer_overflow) {15 if (std.mem.eql(u8, message, "integer overflow")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/integer addition overflow.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .integer_overflow) {15 if (std.mem.eql(u8, message, "integer overflow")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/integer division by zero - vectors.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .divide_by_zero) {15 if (std.mem.eql(u8, message, "division by zero")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/integer division by zero.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .divide_by_zero) {15 if (std.mem.eql(u8, message, "division by zero")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/integer multiplication overflow.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .integer_overflow) {15 if (std.mem.eql(u8, message, "integer overflow")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/integer negation overflow.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .integer_overflow) {15 if (std.mem.eql(u8, message, "integer overflow")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/integer subtraction overflow.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .integer_overflow) {15 if (std.mem.eql(u8, message, "integer overflow")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/invalid resume of async function.zig +11-1
...@@ -1,6 +1,16 @@...@@ -1,6 +1,16 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = message;14 _ = message;
5 _ = stack_trace;15 _ = stack_trace;
6 std.process.exit(0);16 std.process.exit(0);
test/cases/safety/memcpy_alias.zig+12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .memcpy_alias) {15 if (std.mem.eql(u8, message, "@memcpy arguments alias")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/memcpy_len_mismatch.zig+12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .memcpy_len_mismatch) {15 if (std.mem.eql(u8, message, "@memcpy arguments have non-equal lengths")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/memset_array_undefined_bytes.zig+12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .integer_overflow) {15 if (std.mem.eql(u8, message, "integer overflow")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/memset_array_undefined_large.zig+12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .integer_overflow) {15 if (std.mem.eql(u8, message, "integer overflow")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/memset_slice_undefined_bytes.zig+12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .integer_overflow) {15 if (std.mem.eql(u8, message, "integer overflow")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/memset_slice_undefined_large.zig+12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .integer_overflow) {15 if (std.mem.eql(u8, message, "integer overflow")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/modrem by zero.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .divide_by_zero) {15 if (std.mem.eql(u8, message, "division by zero")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/modulus by zero.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .divide_by_zero) {15 if (std.mem.eql(u8, message, "division by zero")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/noreturn returned.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .noreturn_returned) {15 if (std.mem.eql(u8, message, "'noreturn' function returned")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/nosuspend function call, callee suspends.zig +11-1
...@@ -1,6 +1,16 @@...@@ -1,6 +1,16 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = message;14 _ = message;
5 _ = stack_trace;15 _ = stack_trace;
6 std.process.exit(0);16 std.process.exit(0);
test/cases/safety/optional unwrap operator on C pointer.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .unwrap_null) {15 if (std.mem.eql(u8, message, "attempt to use null value")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/optional unwrap operator on null pointer.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .unwrap_null) {15 if (std.mem.eql(u8, message, "attempt to use null value")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/out of bounds array slice by length.zig +13-8
...@@ -1,14 +1,19 @@...@@ -1,14 +1,19 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 switch (cause) {15 if (std.mem.eql(u8, message, "index out of bounds: index 16, len 5")) {
6 .index_out_of_bounds => |info| {16 std.process.exit(0);
7 if (info.index == 16 and info.len == 5) {
8 std.process.exit(0);
9 }
10 },
11 else => {},
12 }17 }
13 std.process.exit(1);18 std.process.exit(1);
14}19}
test/cases/safety/out of bounds slice access.zig +13-8
...@@ -1,14 +1,19 @@...@@ -1,14 +1,19 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 switch (cause) {15 if (std.mem.eql(u8, message, "index out of bounds: index 4, len 4")) {
6 .index_out_of_bounds => |info| {16 std.process.exit(0);
7 if (info.index == 4 and info.len == 4) {
8 std.process.exit(0);
9 }
10 },
11 else => {},
12 }17 }
13 std.process.exit(1);18 std.process.exit(1);
14}19}
test/cases/safety/pointer casting null to non-optional pointer.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .cast_to_null) {15 if (std.mem.eql(u8, message, "cast causes pointer to be null")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/pointer casting to null function pointer.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .cast_to_null) {15 if (std.mem.eql(u8, message, "cast causes pointer to be null")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/pointer slice sentinel mismatch.zig +13-8
...@@ -1,14 +1,19 @@...@@ -1,14 +1,19 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 switch (cause) {15 if (std.mem.eql(u8, message, "sentinel mismatch: expected 0, found 4")) {
6 .sentinel_mismatch_usize => |info| {16 std.process.exit(0);
7 if (info.expected == 0 and info.found == 4) {
8 std.process.exit(0);
9 }
10 },
11 else => {},
12 }17 }
13 std.process.exit(1);18 std.process.exit(1);
14}19}
test/cases/safety/remainder division by zero.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .divide_by_zero) {15 if (std.mem.eql(u8, message, "division by zero")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/resuming a function which is awaiting a call.zig +11-1
...@@ -1,6 +1,16 @@...@@ -1,6 +1,16 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = message;14 _ = message;
5 _ = stack_trace;15 _ = stack_trace;
6 std.process.exit(0);16 std.process.exit(0);
test/cases/safety/resuming a function which is awaiting a frame.zig +11-1
...@@ -1,6 +1,16 @@...@@ -1,6 +1,16 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = message;14 _ = message;
5 _ = stack_trace;15 _ = stack_trace;
6 std.process.exit(0);16 std.process.exit(0);
test/cases/safety/resuming a non-suspended function which has been suspended and resumed.zig +11-1
...@@ -1,6 +1,16 @@...@@ -1,6 +1,16 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = message;14 _ = message;
5 _ = stack_trace;15 _ = stack_trace;
6 std.process.exit(0);16 std.process.exit(0);
test/cases/safety/resuming a non-suspended function which never been suspended.zig +11-1
...@@ -1,6 +1,16 @@...@@ -1,6 +1,16 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = message;14 _ = message;
5 _ = stack_trace;15 _ = stack_trace;
6 std.process.exit(0);16 std.process.exit(0);
test/cases/safety/shift left by huge amount.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .shift_rhs_too_big) {15 if (std.mem.eql(u8, message, "shift amount is greater than the type size")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/shift right by huge amount.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .shift_rhs_too_big) {15 if (std.mem.eql(u8, message, "shift amount is greater than the type size")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/signed integer division overflow - vectors.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .integer_overflow) {15 if (std.mem.eql(u8, message, "integer overflow")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/signed integer division overflow.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .integer_overflow) {15 if (std.mem.eql(u8, message, "integer overflow")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/signed integer not fitting in cast to unsigned integer - widening.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .negative_to_unsigned) {15 if (std.mem.eql(u8, message, "attempt to cast negative value to unsigned integer")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/signed integer not fitting in cast to unsigned integer.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .negative_to_unsigned) {15 if (std.mem.eql(u8, message, "attempt to cast negative value to unsigned integer")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/signed shift left overflow.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .shl_overflow) {15 if (std.mem.eql(u8, message, "left shift overflowed bits")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/signed shift right overflow.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .shr_overflow) {15 if (std.mem.eql(u8, message, "right shift overflowed bits")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/signed-unsigned vector cast.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .negative_to_unsigned) {15 if (std.mem.eql(u8, message, "attempt to cast negative value to unsigned integer")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/slice sentinel mismatch - floats.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .sentinel_mismatch_other) {15 if (std.mem.eql(u8, message, "sentinel mismatch: expected 1.2e0, found 4e0")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/slice sentinel mismatch - optional pointers.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .sentinel_mismatch_other) {15 if (std.mem.eql(u8, message, "sentinel mismatch: expected null, found i32@10")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/slice slice sentinel mismatch.zig +13-8
...@@ -1,14 +1,19 @@...@@ -1,14 +1,19 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 switch (cause) {15 if (std.mem.eql(u8, message, "sentinel mismatch: expected 0, found 4")) {
6 .sentinel_mismatch_usize => |info| {16 std.process.exit(0);
7 if (info.expected == 0 and info.found == 4) {
8 std.process.exit(0);
9 }
10 },
11 else => {},
12 }17 }
13 std.process.exit(1);18 std.process.exit(1);
14}19}
test/cases/safety/slice start index greater than end index.zig +13-8
...@@ -1,14 +1,19 @@...@@ -1,14 +1,19 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 switch (cause) {15 if (std.mem.eql(u8, message, "start index 10 is larger than end index 1")) {
6 .start_index_greater_than_end => |info| {16 std.process.exit(0);
7 if (info.start == 10 and info.end == 1) {
8 std.process.exit(0);
9 }
10 },
11 else => {},
12 }17 }
13 std.process.exit(1);18 std.process.exit(1);
14}19}
test/cases/safety/slice with sentinel out of bounds - runtime len.zig +13-8
...@@ -1,14 +1,19 @@...@@ -1,14 +1,19 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 switch (cause) {15 if (std.mem.eql(u8, message, "index out of bounds: index 5, len 4")) {
6 .index_out_of_bounds => |info| {16 std.process.exit(0);
7 if (info.index == 5 and info.len == 4) {
8 std.process.exit(0);
9 }
10 },
11 else => {},
12 }17 }
13 std.process.exit(1);18 std.process.exit(1);
14}19}
test/cases/safety/slice with sentinel out of bounds.zig +13-8
...@@ -1,14 +1,19 @@...@@ -1,14 +1,19 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 switch (cause) {15 if (std.mem.eql(u8, message, "index out of bounds: index 5, len 4")) {
6 .index_out_of_bounds => |info| {16 std.process.exit(0);
7 if (info.index == 5 and info.len == 4) {
8 std.process.exit(0);
9 }
10 },
11 else => {},
12 }17 }
13 std.process.exit(1);18 std.process.exit(1);
14}19}
test/cases/safety/slicing null C pointer - runtime len.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .unwrap_null) {15 if (std.mem.eql(u8, message, "attempt to use null value")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/slicing null C pointer.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .unwrap_null) {15 if (std.mem.eql(u8, message, "attempt to use null value")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/switch else on corrupt enum value - one prong.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .corrupt_switch) {15 if (std.mem.eql(u8, message, "switch on corrupt value")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/switch else on corrupt enum value - union.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .corrupt_switch) {15 if (std.mem.eql(u8, message, "switch on corrupt value")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/switch else on corrupt enum value.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .corrupt_switch) {15 if (std.mem.eql(u8, message, "switch on corrupt value")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/switch on corrupted enum value.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .corrupt_switch) {15 if (std.mem.eql(u8, message, "switch on corrupt value")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/switch on corrupted union value.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .corrupt_switch) {15 if (std.mem.eql(u8, message, "switch on corrupt value")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/truncating vector cast.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .cast_truncated_data) {15 if (std.mem.eql(u8, message, "integer cast truncated bits")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/unreachable.zig+12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .reached_unreachable) {15 if (std.mem.eql(u8, message, "reached unreachable code")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/unsigned integer not fitting in cast to signed integer - same bit count.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .cast_truncated_data) {15 if (std.mem.eql(u8, message, "integer cast truncated bits")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/unsigned shift left overflow.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .shl_overflow) {15 if (std.mem.eql(u8, message, "left shift overflowed bits")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/unsigned shift right overflow.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .shr_overflow) {15 if (std.mem.eql(u8, message, "right shift overflowed bits")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/unsigned-signed vector cast.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .cast_truncated_data) {15 if (std.mem.eql(u8, message, "integer cast truncated bits")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/unwrap error switch.zig +13-8
...@@ -1,14 +1,19 @@...@@ -1,14 +1,19 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 switch (cause) {15 if (std.mem.eql(u8, message, "attempt to unwrap error: Whatever")) {
6 .unwrap_error => |err| {16 std.process.exit(0);
7 if (err == error.Whatever) {
8 std.process.exit(0);
9 }
10 },
11 else => {},
12 }17 }
13 std.process.exit(1);18 std.process.exit(1);
14}19}
test/cases/safety/unwrap error.zig +13-8
...@@ -1,14 +1,19 @@...@@ -1,14 +1,19 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 switch (cause) {15 if (std.mem.eql(u8, message, "attempt to unwrap error: Whatever")) {
6 .unwrap_error => |err| {16 std.process.exit(0);
7 if (err == error.Whatever) {
8 std.process.exit(0);
9 }
10 },
11 else => {},
12 }17 }
13 std.process.exit(1);18 std.process.exit(1);
14}19}
test/cases/safety/value does not fit in shortening cast - u0.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .cast_truncated_data) {15 if (std.mem.eql(u8, message, "integer cast truncated bits")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/value does not fit in shortening cast.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .cast_truncated_data) {15 if (std.mem.eql(u8, message, "integer cast truncated bits")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/vector integer addition overflow.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .integer_overflow) {15 if (std.mem.eql(u8, message, "integer overflow")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/vector integer multiplication overflow.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .integer_overflow) {15 if (std.mem.eql(u8, message, "integer overflow")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/vector integer negation overflow.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .integer_overflow) {15 if (std.mem.eql(u8, message, "integer overflow")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/vector integer subtraction overflow.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .integer_overflow) {15 if (std.mem.eql(u8, message, "integer overflow")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);
test/cases/safety/zero casted to error.zig +12-2
...@@ -1,8 +1,18 @@...@@ -1,8 +1,18 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {3pub const Panic = struct {
4 pub const call = panic;
5 pub const unwrapError = std.debug.FormattedPanic.unwrapError;
6 pub const outOfBounds = std.debug.FormattedPanic.outOfBounds;
7 pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd;
8 pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch;
9 pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField;
10 pub const messages = std.debug.FormattedPanic.messages;
11};
12
13fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4 _ = stack_trace;14 _ = stack_trace;
5 if (cause == .invalid_error_code) {15 if (std.mem.eql(u8, message, "invalid error code")) {
6 std.process.exit(0);16 std.process.exit(0);
7 }17 }
8 std.process.exit(1);18 std.process.exit(1);