Skip to content

Commit 7f4c0e0

Browse files
committed
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)
1 parent db8c074 commit 7f4c0e0

File tree

95 files changed

+1129
-270
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

95 files changed

+1129
-270
lines changed

lib/std/builtin.zig

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -762,26 +762,35 @@ pub const TestFn = struct {
762762
};
763763

764764
/// Deprecated, use the `Panic` namespace instead.
765+
/// To be deleted after 0.14.0 is released.
765766
pub const PanicFn = fn ([]const u8, ?*StackTrace, ?usize) noreturn;
766-
767767
/// Deprecated, use the `Panic` namespace instead.
768-
pub const panic: PanicFn = if (@hasDecl(root, "panic"))
769-
root.panic
770-
else if (@hasDecl(root, "os") and @hasDecl(root.os, "panic"))
771-
root.os.panic
772-
else
773-
Panic.call;
768+
/// To be deleted after 0.14.0 is released.
769+
pub const panic: PanicFn = Panic.call;
774770

775771
/// This namespace is used by the Zig compiler to emit various kinds of safety
776772
/// panics. These can be overridden by making a public `Panic` namespace in the
777773
/// root source file.
778774
pub const Panic: type = if (@hasDecl(root, "Panic"))
779775
root.Panic
776+
else if (@hasDecl(root, "panic")) // Deprecated, use `Panic` instead.
777+
DeprecatedPanic
780778
else if (builtin.zig_backend == .stage2_riscv64)
781779
std.debug.SimplePanic // https://github.com/ziglang/zig/issues/21519
782780
else
783781
std.debug.FormattedPanic;
784782

783+
/// To be deleted after 0.14.0 is released.
784+
const 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+
785794
/// To be deleted after zig1.wasm is updated.
786795
pub const panicSentinelMismatch = Panic.sentinelMismatch;
787796
/// To be deleted after zig1.wasm is updated.

lib/std/debug/SimplePanic.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ pub fn sentinelMismatch(expected: anytype, found: @TypeOf(expected)) noreturn {
2828

2929
pub fn unwrapError(ert: ?*std.builtin.StackTrace, err: anyerror) noreturn {
3030
_ = ert;
31-
_ = err;
31+
_ = &err;
3232
call("attempt to unwrap error", null, null);
3333
}
3434

test/cases/compile_errors/panic_has_source_location.zig

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,12 @@ export fn foo() void {
66
@panic("oh no");
77
}
88

9-
pub fn panic(cause: std.builtin.PanicCause, ert: ?*std.builtin.StackTrace, ra: ?usize) noreturn {
10-
_ = cause;
11-
_ = ert;
12-
_ = ra;
9+
pub fn panic(_: []const u8, _: ?*std.builtin.StackTrace, _: ?usize) noreturn {
1310
@compileError("panic");
1411
}
1512

1613
// error
1714
// backend=stage2
1815
// target=native
1916
//
20-
// :13:5: error: panic
17+
// :10:5: error: panic

test/cases/safety/@alignCast misaligned.zig

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,18 @@
11
const std = @import("std");
22

3-
pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
3+
pub 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+
13+
fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
414
_ = stack_trace;
5-
if (cause == .incorrect_alignment) {
15+
if (std.mem.eql(u8, message, "incorrect alignment")) {
616
std.process.exit(0);
717
}
818
std.process.exit(1);

test/cases/safety/@asyncCall with too small a frame.zig

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,17 @@
11
const std = @import("std");
22
const builtin = @import("builtin");
33

4-
pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
4+
pub 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+
14+
fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
515
_ = message;
616
_ = stack_trace;
717
std.process.exit(0);

test/cases/safety/@enumFromInt - no matching tag value.zig

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,18 @@
11
const std = @import("std");
22

3-
pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
3+
pub 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+
13+
fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
414
_ = stack_trace;
5-
if (cause == .invalid_enum_value) {
15+
if (std.mem.eql(u8, message, "invalid enum value")) {
616
std.process.exit(0);
717
}
818
std.process.exit(1);

test/cases/safety/@errorCast error not present in destination.zig

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,18 @@
11
const std = @import("std");
22

3-
pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
3+
pub 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+
13+
fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
414
_ = stack_trace;
5-
if (cause == .invalid_error_code) {
15+
if (std.mem.eql(u8, message, "invalid error code")) {
616
std.process.exit(0);
717
}
818
std.process.exit(1);

test/cases/safety/@errorCast error union casted to disjoint set.zig

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,18 @@
11
const std = @import("std");
22

3-
pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
3+
pub 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+
13+
fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
414
_ = stack_trace;
5-
if (cause == .invalid_error_code) {
15+
if (std.mem.eql(u8, message, "invalid error code")) {
616
std.process.exit(0);
717
}
818
std.process.exit(1);

test/cases/safety/@intCast to u0.zig

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,18 @@
11
const std = @import("std");
22

3-
pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
3+
pub 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+
13+
fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
414
_ = stack_trace;
5-
if (cause == .cast_truncated_data) {
15+
if (std.mem.eql(u8, message, "integer cast truncated bits")) {
616
std.process.exit(0);
717
}
818
std.process.exit(1);

test/cases/safety/@intFromFloat cannot fit - negative out of range.zig

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,18 @@
11
const std = @import("std");
22

3-
pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
3+
pub 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+
13+
fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
414
_ = 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")) {
616
std.process.exit(0);
717
}
818
std.process.exit(1);

test/cases/safety/@intFromFloat cannot fit - negative to unsigned.zig

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,18 @@
11
const std = @import("std");
22

3-
pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
3+
pub 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+
13+
fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
414
_ = 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")) {
616
std.process.exit(0);
717
}
818
std.process.exit(1);

test/cases/safety/@intFromFloat cannot fit - positive out of range.zig

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,18 @@
11
const std = @import("std");
22

3-
pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
3+
pub 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+
13+
fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
414
_ = 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")) {
616
std.process.exit(0);
717
}
818
std.process.exit(1);

test/cases/safety/@ptrFromInt address zero to non-optional byte-aligned pointer.zig

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,18 @@
11
const std = @import("std");
22

3-
pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
3+
pub 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+
13+
fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
414
_ = stack_trace;
5-
if (cause == .cast_to_null) {
15+
if (std.mem.eql(u8, message, "cast causes pointer to be null")) {
616
std.process.exit(0);
717
}
818
std.process.exit(1);

test/cases/safety/@ptrFromInt address zero to non-optional pointer.zig

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,18 @@
11
const std = @import("std");
22

3-
pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
3+
pub 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+
13+
fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
414
_ = stack_trace;
5-
if (cause == .cast_to_null) {
15+
if (std.mem.eql(u8, message, "cast causes pointer to be null")) {
616
std.process.exit(0);
717
}
818
std.process.exit(1);

test/cases/safety/@ptrFromInt with misaligned address.zig

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,18 @@
11
const std = @import("std");
22

3-
pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
3+
pub 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+
13+
fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
414
_ = stack_trace;
5-
if (cause == .incorrect_alignment) {
15+
if (std.mem.eql(u8, message, "incorrect alignment")) {
616
std.process.exit(0);
717
}
818
std.process.exit(1);

test/cases/safety/@tagName on corrupted enum value.zig

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,18 @@
11
const std = @import("std");
22

3-
pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
3+
pub 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+
13+
fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
414
_ = stack_trace;
5-
if (cause == .invalid_enum_value) {
15+
if (std.mem.eql(u8, message, "invalid enum value")) {
616
std.process.exit(0);
717
}
818
std.process.exit(1);

test/cases/safety/@tagName on corrupted union value.zig

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,18 @@
11
const std = @import("std");
22

3-
pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
3+
pub 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+
13+
fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
414
_ = stack_trace;
5-
if (cause == .invalid_enum_value) {
15+
if (std.mem.eql(u8, message, "invalid enum value")) {
616
std.process.exit(0);
717
}
818
std.process.exit(1);

test/cases/safety/array slice sentinel mismatch vector.zig

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,18 @@
11
const std = @import("std");
22

3-
pub fn panic(cause: std.builtin.PanicCause, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
3+
pub 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+
13+
fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
414
_ = stack_trace;
5-
if (cause == .sentinel_mismatch_other) {
15+
if (std.mem.eql(u8, message, "sentinel mismatch: expected { 0, 0 }, found { 4, 4 }")) {
616
std.process.exit(0);
717
}
818
std.process.exit(1);

0 commit comments

Comments
 (0)