| author | |
| committer | |
| log | 4d20d6874c418f596c576cea48985de6ef3a3dd2 |
| tree | dbae7fa6ce09114fe95bb7148b54bca9ac9ec2fb |
| parent | 72c60acd5dd9172c648cb3c5a4b51224ebea33f2 |
28 files changed, 140 insertions(+), 86 deletions(-)
src/AstGen.zig+1-2| ... | ... | @@ -6504,8 +6504,7 @@ fn ret(gz: *GenZir, scope: *Scope, node: Ast.Node.Index) InnerError!Zir.Inst.Ref |
| 6504 | 6504 | }, |
| 6505 | 6505 | .always => { |
| 6506 | 6506 | // Value is always an error. Emit both error defers and regular defers. |
| 6507 | const result = if (rl == .ptr) try gz.addUnNode(.load, rl.ptr, node) else operand; | |
| 6508 | const err_code = try gz.addUnNode(.err_union_code, result, node); | |
| 6507 | const err_code = if (rl == .ptr) try gz.addUnNode(.load, rl.ptr, node) else operand; | |
| 6509 | 6508 | try genDefers(gz, defer_outer, scope, .{ .both = err_code }); |
| 6510 | 6509 | try gz.addRet(rl, operand, node); |
| 6511 | 6510 | return Zir.Inst.Ref.unreachable_value; |
test/cases/safety/@errSetCast error not present in destination.zig	+6-4| ... | ... | @@ -1,9 +1,11 @@ |
| 1 | 1 | const std = @import("std"); |
| 2 | 2 | |
| 3 | 3 | pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { |
| 4 | _ = message; | |
| 5 | 4 | _ = stack_trace; |
| 6 | std.process.exit(0); | |
| 5 | if (std.mem.eql(u8, message, "invalid error code")) { | |
| 6 | std.process.exit(0); | |
| 7 | } | |
| 8 | std.process.exit(1); | |
| 7 | 9 | } |
| 8 | 10 | const Set1 = error{A, B}; |
| 9 | 11 | const Set2 = error{A, C}; |
| ... | ... | @@ -15,5 +17,5 @@ fn foo(set1: Set1) Set2 { |
| 15 | 17 | return @errSetCast(Set2, set1); |
| 16 | 18 | } |
| 17 | 19 | // run |
| 18 | // backend=stage1 | |
| 19 | // target=native | |
| \ No newline at end of file | ||
| 20 | // backend=llvm | |
| 21 | // target=native |
test/cases/safety/@intCast to u0.zig	+6-4| ... | ... | @@ -1,9 +1,11 @@ |
| 1 | 1 | const std = @import("std"); |
| 2 | 2 | |
| 3 | 3 | pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { |
| 4 | _ = message; | |
| 5 | 4 | _ = stack_trace; |
| 6 | std.process.exit(0); | |
| 5 | if (std.mem.eql(u8, message, "integer cast truncated bits")) { | |
| 6 | std.process.exit(0); | |
| 7 | } | |
| 8 | std.process.exit(1); | |
| 7 | 9 | } |
| 8 | 10 | |
| 9 | 11 | pub fn main() !void { |
| ... | ... | @@ -16,5 +18,5 @@ fn bar(one: u1, not_zero: i32) void { |
| 16 | 18 | _ = x; |
| 17 | 19 | } |
| 18 | 20 | // run |
| 19 | // backend=stage1 | |
| 20 | // target=native | |
| \ No newline at end of file | ||
| 21 | // backend=llvm | |
| 22 | // target=native |
test/cases/safety/@intToPtr address zero to non-optional byte-aligned pointer.zig	+5-3| ... | ... | @@ -1,9 +1,11 @@ |
| 1 | 1 | const std = @import("std"); |
| 2 | 2 | |
| 3 | 3 | pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { |
| 4 | _ = message; | |
| 5 | 4 | _ = stack_trace; |
| 6 | std.process.exit(0); | |
| 5 | if (std.mem.eql(u8, message, "cast causes pointer to be null")) { | |
| 6 | std.process.exit(0); | |
| 7 | } | |
| 8 | std.process.exit(1); | |
| 7 | 9 | } |
| 8 | 10 | pub fn main() !void { |
| 9 | 11 | var zero: usize = 0; |
| ... | ... | @@ -12,5 +14,5 @@ pub fn main() !void { |
| 12 | 14 | return error.TestFailed; |
| 13 | 15 | } |
| 14 | 16 | // run |
| 15 | // backend=stage1 | |
| 17 | // backend=llvm | |
| 16 | 18 | // target=native |
test/cases/safety/@intToPtr address zero to non-optional pointer.zig	+5-3| ... | ... | @@ -1,9 +1,11 @@ |
| 1 | 1 | const std = @import("std"); |
| 2 | 2 | |
| 3 | 3 | pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { |
| 4 | _ = message; | |
| 5 | 4 | _ = stack_trace; |
| 6 | std.process.exit(0); | |
| 5 | if (std.mem.eql(u8, message, "cast causes pointer to be null")) { | |
| 6 | std.process.exit(0); | |
| 7 | } | |
| 8 | std.process.exit(1); | |
| 7 | 9 | } |
| 8 | 10 | pub fn main() !void { |
| 9 | 11 | var zero: usize = 0; |
| ... | ... | @@ -12,5 +14,5 @@ pub fn main() !void { |
| 12 | 14 | return error.TestFailed; |
| 13 | 15 | } |
| 14 | 16 | // run |
| 15 | // backend=stage1 | |
| 17 | // backend=llvm | |
| 16 | 18 | // target=native |
test/cases/safety/calling panic.zig	+2-2| ... | ... | @@ -12,5 +12,5 @@ pub fn main() !void { |
| 12 | 12 | return error.TestFailed; |
| 13 | 13 | } |
| 14 | 14 | // run |
| 15 | // backend=stage1 | |
| 16 | // target=native | |
| \ No newline at end of file | ||
| 15 | // backend=llvm | |
| 16 | // target=native |
test/cases/safety/cast integer to global error and no code matches.zig	+6-4| ... | ... | @@ -1,9 +1,11 @@ |
| 1 | 1 | const std = @import("std"); |
| 2 | 2 | |
| 3 | 3 | pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { |
| 4 | _ = message; | |
| 5 | 4 | _ = stack_trace; |
| 6 | std.process.exit(0); | |
| 5 | if (std.mem.eql(u8, message, "invalid error code")) { | |
| 6 | std.process.exit(0); | |
| 7 | } | |
| 8 | std.process.exit(1); | |
| 7 | 9 | } |
| 8 | 10 | pub fn main() !void { |
| 9 | 11 | bar(9999) catch {}; |
| ... | ... | @@ -13,5 +15,5 @@ fn bar(x: u16) anyerror { |
| 13 | 15 | return @intToError(x); |
| 14 | 16 | } |
| 15 | 17 | // run |
| 16 | // backend=stage1 | |
| 17 | // target=native | |
| \ No newline at end of file | ||
| 18 | // backend=llvm | |
| 19 | // target=native |
test/cases/safety/intToPtr with misaligned address.zig	+1-1| ... | ... | @@ -14,5 +14,5 @@ pub fn main() !void { |
| 14 | 14 | return error.TestFailed; |
| 15 | 15 | } |
| 16 | 16 | // run |
| 17 | // backend=stage1 | |
| 17 | // backend=llvm | |
| 18 | 18 | // target=native |
test/cases/safety/integer addition overflow.zig	+1-1| ... | ... | @@ -19,5 +19,5 @@ fn add(a: u16, b: u16) u16 { |
| 19 | 19 | } |
| 20 | 20 | |
| 21 | 21 | // run |
| 22 | // backend=stage1 | |
| 22 | // backend=llvm | |
| 23 | 23 | // target=native |
test/cases/safety/integer multiplication overflow.zig	+6-4| ... | ... | @@ -1,9 +1,11 @@ |
| 1 | 1 | const std = @import("std"); |
| 2 | 2 | |
| 3 | 3 | pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { |
| 4 | _ = message; | |
| 5 | 4 | _ = stack_trace; |
| 6 | std.process.exit(0); | |
| 5 | if (std.mem.eql(u8, message, "integer overflow")) { | |
| 6 | std.process.exit(0); | |
| 7 | } | |
| 8 | std.process.exit(1); | |
| 7 | 9 | } |
| 8 | 10 | |
| 9 | 11 | pub fn main() !void { |
| ... | ... | @@ -15,5 +17,5 @@ fn mul(a: u16, b: u16) u16 { |
| 15 | 17 | return a * b; |
| 16 | 18 | } |
| 17 | 19 | // run |
| 18 | // backend=stage1 | |
| 19 | // target=native | |
| \ No newline at end of file | ||
| 20 | // backend=llvm | |
| 21 | // target=native |
test/cases/safety/integer negation overflow.zig	+6-4| ... | ... | @@ -1,9 +1,11 @@ |
| 1 | 1 | const std = @import("std"); |
| 2 | 2 | |
| 3 | 3 | pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { |
| 4 | _ = message; | |
| 5 | 4 | _ = stack_trace; |
| 6 | std.process.exit(0); | |
| 5 | if (std.mem.eql(u8, message, "integer overflow")) { | |
| 6 | std.process.exit(0); | |
| 7 | } | |
| 8 | std.process.exit(1); | |
| 7 | 9 | } |
| 8 | 10 | |
| 9 | 11 | pub fn main() !void { |
| ... | ... | @@ -15,5 +17,5 @@ fn neg(a: i16) i16 { |
| 15 | 17 | return -a; |
| 16 | 18 | } |
| 17 | 19 | // run |
| 18 | // backend=stage1 | |
| 19 | // target=native | |
| \ No newline at end of file | ||
| 20 | // backend=llvm | |
| 21 | // target=native |
test/cases/safety/integer subtraction overflow.zig	+6-4| ... | ... | @@ -1,9 +1,11 @@ |
| 1 | 1 | const std = @import("std"); |
| 2 | 2 | |
| 3 | 3 | pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { |
| 4 | _ = message; | |
| 5 | 4 | _ = stack_trace; |
| 6 | std.process.exit(0); | |
| 5 | if (std.mem.eql(u8, message, "integer overflow")) { | |
| 6 | std.process.exit(0); | |
| 7 | } | |
| 8 | std.process.exit(1); | |
| 7 | 9 | } |
| 8 | 10 | |
| 9 | 11 | pub fn main() !void { |
| ... | ... | @@ -15,5 +17,5 @@ fn sub(a: u16, b: u16) u16 { |
| 15 | 17 | return a - b; |
| 16 | 18 | } |
| 17 | 19 | // run |
| 18 | // backend=stage1 | |
| 19 | // target=native | |
| \ No newline at end of file | ||
| 20 | // backend=llvm | |
| 21 | // target=native |
test/cases/safety/optional unwrap operator on C pointer.zig	+5-3| ... | ... | @@ -1,9 +1,11 @@ |
| 1 | 1 | const std = @import("std"); |
| 2 | 2 | |
| 3 | 3 | pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { |
| 4 | _ = message; | |
| 5 | 4 | _ = stack_trace; |
| 6 | std.process.exit(0); | |
| 5 | if (std.mem.eql(u8, message, "attempt to use null value")) { | |
| 6 | std.process.exit(0); | |
| 7 | } | |
| 8 | std.process.exit(1); | |
| 7 | 9 | } |
| 8 | 10 | pub fn main() !void { |
| 9 | 11 | var ptr: [*c]i32 = null; |
| ... | ... | @@ -12,5 +14,5 @@ pub fn main() !void { |
| 12 | 14 | return error.TestFailed; |
| 13 | 15 | } |
| 14 | 16 | // run |
| 15 | // backend=stage1 | |
| 17 | // backend=llvm | |
| 16 | 18 | // target=native |
test/cases/safety/optional unwrap operator on null pointer.zig	+5-3| ... | ... | @@ -1,9 +1,11 @@ |
| 1 | 1 | const std = @import("std"); |
| 2 | 2 | |
| 3 | 3 | pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { |
| 4 | _ = message; | |
| 5 | 4 | _ = stack_trace; |
| 6 | std.process.exit(0); | |
| 5 | if (std.mem.eql(u8, message, "attempt to use null value")) { | |
| 6 | std.process.exit(0); | |
| 7 | } | |
| 8 | std.process.exit(1); | |
| 7 | 9 | } |
| 8 | 10 | pub fn main() !void { |
| 9 | 11 | var ptr: ?*i32 = null; |
| ... | ... | @@ -12,5 +14,5 @@ pub fn main() !void { |
| 12 | 14 | return error.TestFailed; |
| 13 | 15 | } |
| 14 | 16 | // run |
| 15 | // backend=stage1 | |
| 17 | // backend=llvm | |
| 16 | 18 | // target=native |
test/cases/safety/out of bounds slice access.zig	+6-4| ... | ... | @@ -1,9 +1,11 @@ |
| 1 | 1 | const std = @import("std"); |
| 2 | 2 | |
| 3 | 3 | pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { |
| 4 | _ = message; | |
| 5 | 4 | _ = stack_trace; |
| 6 | std.process.exit(0); | |
| 5 | if (std.mem.eql(u8, message, "attempt to index out of bound: index 4, len 4")) { | |
| 6 | std.process.exit(0); | |
| 7 | } | |
| 8 | std.process.exit(1); | |
| 7 | 9 | } |
| 8 | 10 | pub fn main() !void { |
| 9 | 11 | const a = [_]i32{1, 2, 3, 4}; |
| ... | ... | @@ -15,5 +17,5 @@ fn bar(a: []const i32) i32 { |
| 15 | 17 | } |
| 16 | 18 | fn baz(_: i32) void { } |
| 17 | 19 | // run |
| 18 | // backend=stage1 | |
| 19 | // target=native | |
| \ No newline at end of file | ||
| 20 | // backend=llvm | |
| 21 | // target=native |
test/cases/safety/signed shift left overflow.zig	+6-4| ... | ... | @@ -1,9 +1,11 @@ |
| 1 | 1 | const std = @import("std"); |
| 2 | 2 | |
| 3 | 3 | pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { |
| 4 | _ = message; | |
| 5 | 4 | _ = stack_trace; |
| 6 | std.process.exit(0); | |
| 5 | if (std.mem.eql(u8, message, "left shift overflowed bits")) { | |
| 6 | std.process.exit(0); | |
| 7 | } | |
| 8 | std.process.exit(1); | |
| 7 | 9 | } |
| 8 | 10 | |
| 9 | 11 | pub fn main() !void { |
| ... | ... | @@ -15,5 +17,5 @@ fn shl(a: i16, b: u4) i16 { |
| 15 | 17 | return @shlExact(a, b); |
| 16 | 18 | } |
| 17 | 19 | // run |
| 18 | // backend=stage1 | |
| 19 | // target=native | |
| \ No newline at end of file | ||
| 20 | // backend=llvm | |
| 21 | // target=native |
test/cases/safety/truncating vector cast.zig	+1-1| ... | ... | @@ -16,5 +16,5 @@ pub fn main() !void { |
| 16 | 16 | } |
| 17 | 17 | |
| 18 | 18 | // run |
| 19 | // backend=stage1 | |
| 19 | // backend=llvm | |
| 20 | 20 | // target=native |
test/cases/safety/unreachable.zig created+15| ... | ... | @@ -0,0 +1,15 @@ |
| 1 | const std = @import("std"); | |
| 2 | ||
| 3 | pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { | |
| 4 | _ = stack_trace; | |
| 5 | if (std.mem.eql(u8, message, "reached unreachable code")) { | |
| 6 | std.process.exit(0); | |
| 7 | } | |
| 8 | std.process.exit(1); | |
| 9 | } | |
| 10 | pub fn main() !void { | |
| 11 | unreachable; | |
| 12 | } | |
| 13 | // run | |
| 14 | // backend=llvm | |
| 15 | // target=native |
test/cases/safety/unsigned integer not fitting in cast to signed integer - same bit count.zig	+6-4| ... | ... | @@ -1,9 +1,11 @@ |
| 1 | 1 | const std = @import("std"); |
| 2 | 2 | |
| 3 | 3 | pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { |
| 4 | _ = message; | |
| 5 | 4 | _ = stack_trace; |
| 6 | std.process.exit(0); | |
| 5 | if (std.mem.eql(u8, message, "integer cast truncated bits")) { | |
| 6 | std.process.exit(0); | |
| 7 | } | |
| 8 | std.process.exit(1); | |
| 7 | 9 | } |
| 8 | 10 | pub fn main() !void { |
| 9 | 11 | var value: u8 = 245; |
| ... | ... | @@ -12,5 +14,5 @@ pub fn main() !void { |
| 12 | 14 | return error.TestFailed; |
| 13 | 15 | } |
| 14 | 16 | // run |
| 15 | // backend=stage1 | |
| 16 | // target=native | |
| \ No newline at end of file | ||
| 17 | // backend=llvm | |
| 18 | // target=native |
test/cases/safety/unsigned shift left overflow.zig	+6-4| ... | ... | @@ -1,9 +1,11 @@ |
| 1 | 1 | const std = @import("std"); |
| 2 | 2 | |
| 3 | 3 | pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { |
| 4 | _ = message; | |
| 5 | 4 | _ = stack_trace; |
| 6 | std.process.exit(0); | |
| 5 | if (std.mem.eql(u8, message, "left shift overflowed bits")) { | |
| 6 | std.process.exit(0); | |
| 7 | } | |
| 8 | std.process.exit(1); | |
| 7 | 9 | } |
| 8 | 10 | |
| 9 | 11 | pub fn main() !void { |
| ... | ... | @@ -15,5 +17,5 @@ fn shl(a: u16, b: u4) u16 { |
| 15 | 17 | return @shlExact(a, b); |
| 16 | 18 | } |
| 17 | 19 | // run |
| 18 | // backend=stage1 | |
| 19 | // target=native | |
| \ No newline at end of file | ||
| 20 | // backend=llvm | |
| 21 | // target=native |
test/cases/safety/unsigned-signed vector cast.zig	+1-1| ... | ... | @@ -16,5 +16,5 @@ pub fn main() !void { |
| 16 | 16 | } |
| 17 | 17 | |
| 18 | 18 | // run |
| 19 | // backend=stage1 | |
| 19 | // backend=llvm | |
| 20 | 20 | // target=native |
test/cases/safety/unwrap error.zig	+2-2| ... | ... | @@ -15,5 +15,5 @@ fn bar() !void { |
| 15 | 15 | return error.Whatever; |
| 16 | 16 | } |
| 17 | 17 | // run |
| 18 | // backend=stage1 | |
| 19 | // target=native | |
| \ No newline at end of file | ||
| 18 | // backend=llvm | |
| 19 | // target=native |
test/cases/safety/value does not fit in shortening cast - u0.zig	+6-4| ... | ... | @@ -1,9 +1,11 @@ |
| 1 | 1 | const std = @import("std"); |
| 2 | 2 | |
| 3 | 3 | pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { |
| 4 | _ = message; | |
| 5 | 4 | _ = stack_trace; |
| 6 | std.process.exit(0); | |
| 5 | if (std.mem.eql(u8, message, "integer cast truncated bits")) { | |
| 6 | std.process.exit(0); | |
| 7 | } | |
| 8 | std.process.exit(1); | |
| 7 | 9 | } |
| 8 | 10 | |
| 9 | 11 | pub fn main() !void { |
| ... | ... | @@ -15,5 +17,5 @@ fn shorten_cast(x: u8) u0 { |
| 15 | 17 | return @intCast(u0, x); |
| 16 | 18 | } |
| 17 | 19 | // run |
| 18 | // backend=stage1 | |
| 19 | // target=native | |
| \ No newline at end of file | ||
| 20 | // backend=llvm | |
| 21 | // target=native |
test/cases/safety/value does not fit in shortening cast.zig	+6-4| ... | ... | @@ -1,9 +1,11 @@ |
| 1 | 1 | const std = @import("std"); |
| 2 | 2 | |
| 3 | 3 | pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { |
| 4 | _ = message; | |
| 5 | 4 | _ = stack_trace; |
| 6 | std.process.exit(0); | |
| 5 | if (std.mem.eql(u8, message, "integer cast truncated bits")) { | |
| 6 | std.process.exit(0); | |
| 7 | } | |
| 8 | std.process.exit(1); | |
| 7 | 9 | } |
| 8 | 10 | |
| 9 | 11 | pub fn main() !void { |
| ... | ... | @@ -15,5 +17,5 @@ fn shorten_cast(x: i32) i8 { |
| 15 | 17 | return @intCast(i8, x); |
| 16 | 18 | } |
| 17 | 19 | // run |
| 18 | // backend=stage1 | |
| 19 | // target=native | |
| \ No newline at end of file | ||
| 20 | // backend=llvm | |
| 21 | // target=native |
test/cases/safety/vector integer addition overflow.zig	+6-4| ... | ... | @@ -1,9 +1,11 @@ |
| 1 | 1 | const std = @import("std"); |
| 2 | 2 | |
| 3 | 3 | pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { |
| 4 | _ = message; | |
| 5 | 4 | _ = stack_trace; |
| 6 | std.process.exit(0); | |
| 5 | if (std.mem.eql(u8, message, "integer overflow")) { | |
| 6 | std.process.exit(0); | |
| 7 | } | |
| 8 | std.process.exit(1); | |
| 7 | 9 | } |
| 8 | 10 | pub fn main() !void { |
| 9 | 11 | var a: @Vector(4, i32) = [_]i32{ 1, 2, 2147483643, 4 }; |
| ... | ... | @@ -16,5 +18,5 @@ fn add(a: @Vector(4, i32), b: @Vector(4, i32)) @Vector(4, i32) { |
| 16 | 18 | return a + b; |
| 17 | 19 | } |
| 18 | 20 | // run |
| 19 | // backend=stage1 | |
| 20 | // target=native | |
| \ No newline at end of file | ||
| 21 | // backend=llvm | |
| 22 | // target=native |
test/cases/safety/vector integer multiplication overflow.zig	+6-4| ... | ... | @@ -1,9 +1,11 @@ |
| 1 | 1 | const std = @import("std"); |
| 2 | 2 | |
| 3 | 3 | pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { |
| 4 | _ = message; | |
| 5 | 4 | _ = stack_trace; |
| 6 | std.process.exit(0); | |
| 5 | if (std.mem.eql(u8, message, "integer overflow")) { | |
| 6 | std.process.exit(0); | |
| 7 | } | |
| 8 | std.process.exit(1); | |
| 7 | 9 | } |
| 8 | 10 | pub fn main() !void { |
| 9 | 11 | var a: @Vector(4, u8) = [_]u8{ 1, 2, 200, 4 }; |
| ... | ... | @@ -16,5 +18,5 @@ fn mul(a: @Vector(4, u8), b: @Vector(4, u8)) @Vector(4, u8) { |
| 16 | 18 | return a * b; |
| 17 | 19 | } |
| 18 | 20 | // run |
| 19 | // backend=stage1 | |
| 20 | // target=native | |
| \ No newline at end of file | ||
| 21 | // backend=llvm | |
| 22 | // target=native |
test/cases/safety/vector integer negation overflow.zig	+6-4| ... | ... | @@ -1,9 +1,11 @@ |
| 1 | 1 | const std = @import("std"); |
| 2 | 2 | |
| 3 | 3 | pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { |
| 4 | _ = message; | |
| 5 | 4 | _ = stack_trace; |
| 6 | std.process.exit(0); | |
| 5 | if (std.mem.eql(u8, message, "integer overflow")) { | |
| 6 | std.process.exit(0); | |
| 7 | } | |
| 8 | std.process.exit(1); | |
| 7 | 9 | } |
| 8 | 10 | pub fn main() !void { |
| 9 | 11 | var a: @Vector(4, i16) = [_]i16{ 1, -32768, 200, 4 }; |
| ... | ... | @@ -15,5 +17,5 @@ fn neg(a: @Vector(4, i16)) @Vector(4, i16) { |
| 15 | 17 | return -a; |
| 16 | 18 | } |
| 17 | 19 | // run |
| 18 | // backend=stage1 | |
| 19 | // target=native | |
| \ No newline at end of file | ||
| 20 | // backend=llvm | |
| 21 | // target=native |
test/cases/safety/vector integer subtraction overflow.zig	+6-4| ... | ... | @@ -1,9 +1,11 @@ |
| 1 | 1 | const std = @import("std"); |
| 2 | 2 | |
| 3 | 3 | pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { |
| 4 | _ = message; | |
| 5 | 4 | _ = stack_trace; |
| 6 | std.process.exit(0); | |
| 5 | if (std.mem.eql(u8, message, "integer overflow")) { | |
| 6 | std.process.exit(0); | |
| 7 | } | |
| 8 | std.process.exit(1); | |
| 7 | 9 | } |
| 8 | 10 | pub fn main() !void { |
| 9 | 11 | var a: @Vector(4, u32) = [_]u32{ 1, 2, 8, 4 }; |
| ... | ... | @@ -16,5 +18,5 @@ fn sub(a: @Vector(4, u32), b: @Vector(4, u32)) @Vector(4, u32) { |
| 16 | 18 | return a - b; |
| 17 | 19 | } |
| 18 | 20 | // run |
| 19 | // backend=stage1 | |
| 20 | // target=native | |
| \ No newline at end of file | ||
| 21 | // backend=llvm | |
| 22 | // target=native |