From 4d20d6874c418f596c576cea48985de6ef3a3dd2 Mon Sep 17 00:00:00 2001 From: Veikka Tuominen Date: Sat, 16 Jul 2022 01:50:32 +0300 Subject: [PATCH] move passing safety tests to stage2 --- src/AstGen.zig | 3 +-- ...rrSetCast error not present in destination.zig | 10 ++++++---- test/cases/safety/@intCast to u0.zig | 10 ++++++---- ... zero to non-optional byte-aligned pointer.zig | 8 +++++--- ...ToPtr address zero to non-optional pointer.zig | 8 +++++--- test/cases/safety/calling panic.zig | 4 ++-- ...nteger to global error and no code matches.zig | 10 ++++++---- .../safety/intToPtr with misaligned address.zig | 2 +- test/cases/safety/integer addition overflow.zig | 2 +- .../safety/integer multiplication overflow.zig | 10 ++++++---- test/cases/safety/integer negation overflow.zig | 10 ++++++---- .../cases/safety/integer subtraction overflow.zig | 10 ++++++---- .../optional unwrap operator on C pointer.zig | 8 +++++--- .../optional unwrap operator on null pointer.zig | 8 +++++--- test/cases/safety/out of bounds slice access.zig | 10 ++++++---- test/cases/safety/signed shift left overflow.zig | 10 ++++++---- test/cases/safety/truncating vector cast.zig | 2 +- test/cases/safety/unreachable.zig | 15 +++++++++++++++ ...in cast to signed integer - same bit count.zig | 10 ++++++---- .../cases/safety/unsigned shift left overflow.zig | 10 ++++++---- test/cases/safety/unsigned-signed vector cast.zig | 2 +- test/cases/safety/unwrap error.zig | 4 ++-- ...value does not fit in shortening cast - u0.zig | 10 ++++++---- .../value does not fit in shortening cast.zig | 10 ++++++---- .../safety/vector integer addition overflow.zig | 10 ++++++---- .../vector integer multiplication overflow.zig | 10 ++++++---- .../safety/vector integer negation overflow.zig | 10 ++++++---- .../vector integer subtraction overflow.zig | 10 ++++++---- 28 files changed, 140 insertions(+), 86 deletions(-) create mode 100644 test/cases/safety/unreachable.zig diff --git a/src/AstGen.zig b/src/AstGen.zig index af0fac04f14bab9786fb5e32b31fa8a1663c8cc7..a0ba743c4e0f619b7f43452f61e84df2afe2a91f 100644 --- a/src/AstGen.zig +++ b/src/AstGen.zig @@ -6504,8 +6504,7 @@ fn ret(gz: *GenZir, scope: *Scope, node: Ast.Node.Index) InnerError!Zir.Inst.Ref }, .always => { // Value is always an error. Emit both error defers and regular defers. - const result = if (rl == .ptr) try gz.addUnNode(.load, rl.ptr, node) else operand; - const err_code = try gz.addUnNode(.err_union_code, result, node); + const err_code = if (rl == .ptr) try gz.addUnNode(.load, rl.ptr, node) else operand; try genDefers(gz, defer_outer, scope, .{ .both = err_code }); try gz.addRet(rl, operand, node); return Zir.Inst.Ref.unreachable_value; diff --git a/test/cases/safety/@errSetCast error not present in destination.zig b/test/cases/safety/@errSetCast error not present in destination.zig index 5bb92f4f28a8325b67bb1fc626f8fb7f6d0c3e2a..bf4dee8421c8b91ea01f4c9d3cecfda4ea2d3fe0 100644 --- a/test/cases/safety/@errSetCast error not present in destination.zig +++ b/test/cases/safety/@errSetCast error not present in destination.zig @@ -1,9 +1,11 @@ const std = @import("std"); pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { - _ = message; _ = stack_trace; - std.process.exit(0); + if (std.mem.eql(u8, message, "invalid error code")) { + std.process.exit(0); + } + std.process.exit(1); } const Set1 = error{A, B}; const Set2 = error{A, C}; @@ -15,5 +17,5 @@ fn foo(set1: Set1) Set2 { return @errSetCast(Set2, set1); } // run -// backend=stage1 -// target=native \ No newline at end of file +// backend=llvm +// target=native diff --git a/test/cases/safety/@intCast to u0.zig b/test/cases/safety/@intCast to u0.zig index 7d51fdec2559a4d6ee41835bc8b9b40ad9f18f8c..0f38d59e50ed61f5586c1c7dba7e1b0c6ff7fafb 100644 --- a/test/cases/safety/@intCast to u0.zig +++ b/test/cases/safety/@intCast to u0.zig @@ -1,9 +1,11 @@ const std = @import("std"); pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { - _ = message; _ = stack_trace; - std.process.exit(0); + if (std.mem.eql(u8, message, "integer cast truncated bits")) { + std.process.exit(0); + } + std.process.exit(1); } pub fn main() !void { @@ -16,5 +18,5 @@ fn bar(one: u1, not_zero: i32) void { _ = x; } // run -// backend=stage1 -// target=native \ No newline at end of file +// backend=llvm +// target=native diff --git a/test/cases/safety/@intToPtr address zero to non-optional byte-aligned pointer.zig b/test/cases/safety/@intToPtr address zero to non-optional byte-aligned pointer.zig index ac781dc53f98967bed3da04efc92bc3c1fe7fa16..a3b7f374cebc423fdb7d4d1129fa4567f66d3b67 100644 --- a/test/cases/safety/@intToPtr address zero to non-optional byte-aligned pointer.zig +++ b/test/cases/safety/@intToPtr address zero to non-optional byte-aligned pointer.zig @@ -1,9 +1,11 @@ const std = @import("std"); pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { - _ = message; _ = stack_trace; - std.process.exit(0); + if (std.mem.eql(u8, message, "cast causes pointer to be null")) { + std.process.exit(0); + } + std.process.exit(1); } pub fn main() !void { var zero: usize = 0; @@ -12,5 +14,5 @@ pub fn main() !void { return error.TestFailed; } // run -// backend=stage1 +// backend=llvm // target=native diff --git a/test/cases/safety/@intToPtr address zero to non-optional pointer.zig b/test/cases/safety/@intToPtr address zero to non-optional pointer.zig index f8fd53eb97a7cb6f439db71cd88b241670c8e7ac..8724e98131ff6272a9f0360d9ae28798ab9244af 100644 --- a/test/cases/safety/@intToPtr address zero to non-optional pointer.zig +++ b/test/cases/safety/@intToPtr address zero to non-optional pointer.zig @@ -1,9 +1,11 @@ const std = @import("std"); pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { - _ = message; _ = stack_trace; - std.process.exit(0); + if (std.mem.eql(u8, message, "cast causes pointer to be null")) { + std.process.exit(0); + } + std.process.exit(1); } pub fn main() !void { var zero: usize = 0; @@ -12,5 +14,5 @@ pub fn main() !void { return error.TestFailed; } // run -// backend=stage1 +// backend=llvm // target=native diff --git a/test/cases/safety/calling panic.zig b/test/cases/safety/calling panic.zig index 5befea3e3cfe5714cc0a325b568e61a4a9acde2e..29f3a6c66334efc149bcaecfbd6b7e263ee87e92 100644 --- a/test/cases/safety/calling panic.zig +++ b/test/cases/safety/calling panic.zig @@ -12,5 +12,5 @@ pub fn main() !void { return error.TestFailed; } // run -// backend=stage1 -// target=native \ No newline at end of file +// backend=llvm +// target=native diff --git a/test/cases/safety/cast integer to global error and no code matches.zig b/test/cases/safety/cast integer to global error and no code matches.zig index 3a8dc2374f50068ebe59a9da616dff42853e82ad..d423704039ee02c1bcae18831b7f83e8aa02ce95 100644 --- a/test/cases/safety/cast integer to global error and no code matches.zig +++ b/test/cases/safety/cast integer to global error and no code matches.zig @@ -1,9 +1,11 @@ const std = @import("std"); pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { - _ = message; _ = stack_trace; - std.process.exit(0); + if (std.mem.eql(u8, message, "invalid error code")) { + std.process.exit(0); + } + std.process.exit(1); } pub fn main() !void { bar(9999) catch {}; @@ -13,5 +15,5 @@ fn bar(x: u16) anyerror { return @intToError(x); } // run -// backend=stage1 -// target=native \ No newline at end of file +// backend=llvm +// target=native diff --git a/test/cases/safety/intToPtr with misaligned address.zig b/test/cases/safety/intToPtr with misaligned address.zig index 5b480ecccaf1d31592b1ce40be3b97f6342c69c6..6cb085a64bc96e81790eed8ad77f5e2a3e9a3ec8 100644 --- a/test/cases/safety/intToPtr with misaligned address.zig +++ b/test/cases/safety/intToPtr with misaligned address.zig @@ -14,5 +14,5 @@ pub fn main() !void { return error.TestFailed; } // run -// backend=stage1 +// backend=llvm // target=native diff --git a/test/cases/safety/integer addition overflow.zig b/test/cases/safety/integer addition overflow.zig index cd23b66f36db1e2b47a4df6f9425df63ebc4dfc5..aa2ab60dd493cf9760d8456e379c71ac0bc09372 100644 --- a/test/cases/safety/integer addition overflow.zig +++ b/test/cases/safety/integer addition overflow.zig @@ -19,5 +19,5 @@ fn add(a: u16, b: u16) u16 { } // run -// backend=stage1 +// backend=llvm // target=native diff --git a/test/cases/safety/integer multiplication overflow.zig b/test/cases/safety/integer multiplication overflow.zig index c9894217a7b77b9e93045581dddaf91be4566435..af7e6383817c6d1015f345a7d9497b109515cae8 100644 --- a/test/cases/safety/integer multiplication overflow.zig +++ b/test/cases/safety/integer multiplication overflow.zig @@ -1,9 +1,11 @@ const std = @import("std"); pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { - _ = message; _ = stack_trace; - std.process.exit(0); + if (std.mem.eql(u8, message, "integer overflow")) { + std.process.exit(0); + } + std.process.exit(1); } pub fn main() !void { @@ -15,5 +17,5 @@ fn mul(a: u16, b: u16) u16 { return a * b; } // run -// backend=stage1 -// target=native \ No newline at end of file +// backend=llvm +// target=native diff --git a/test/cases/safety/integer negation overflow.zig b/test/cases/safety/integer negation overflow.zig index f3eb1feffe50bd6d66c1a9a1b2103fa21995f104..e48ffff761ff20f61999624e7877692b579f8a8d 100644 --- a/test/cases/safety/integer negation overflow.zig +++ b/test/cases/safety/integer negation overflow.zig @@ -1,9 +1,11 @@ const std = @import("std"); pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { - _ = message; _ = stack_trace; - std.process.exit(0); + if (std.mem.eql(u8, message, "integer overflow")) { + std.process.exit(0); + } + std.process.exit(1); } pub fn main() !void { @@ -15,5 +17,5 @@ fn neg(a: i16) i16 { return -a; } // run -// backend=stage1 -// target=native \ No newline at end of file +// backend=llvm +// target=native diff --git a/test/cases/safety/integer subtraction overflow.zig b/test/cases/safety/integer subtraction overflow.zig index ce1526cf602f96ddfafd3b38d6df8f61286929ae..6d9380ee26ef9464d3f2922b58347867ff2f4e92 100644 --- a/test/cases/safety/integer subtraction overflow.zig +++ b/test/cases/safety/integer subtraction overflow.zig @@ -1,9 +1,11 @@ const std = @import("std"); pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { - _ = message; _ = stack_trace; - std.process.exit(0); + if (std.mem.eql(u8, message, "integer overflow")) { + std.process.exit(0); + } + std.process.exit(1); } pub fn main() !void { @@ -15,5 +17,5 @@ fn sub(a: u16, b: u16) u16 { return a - b; } // run -// backend=stage1 -// target=native \ No newline at end of file +// backend=llvm +// target=native diff --git a/test/cases/safety/optional unwrap operator on C pointer.zig b/test/cases/safety/optional unwrap operator on C pointer.zig index 05614b4ca2d9ad579ac11fa03f17d355c3c3397f..10e605cadd24934096ea38cba3c5b29a37c39932 100644 --- a/test/cases/safety/optional unwrap operator on C pointer.zig +++ b/test/cases/safety/optional unwrap operator on C pointer.zig @@ -1,9 +1,11 @@ const std = @import("std"); pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { - _ = message; _ = stack_trace; - std.process.exit(0); + if (std.mem.eql(u8, message, "attempt to use null value")) { + std.process.exit(0); + } + std.process.exit(1); } pub fn main() !void { var ptr: [*c]i32 = null; @@ -12,5 +14,5 @@ pub fn main() !void { return error.TestFailed; } // run -// backend=stage1 +// backend=llvm // target=native diff --git a/test/cases/safety/optional unwrap operator on null pointer.zig b/test/cases/safety/optional unwrap operator on null pointer.zig index 1db44ba22a019ac56ff7a13133449dfcd6fba32d..3d2991d9ecc329797b57c20b09a948f267736214 100644 --- a/test/cases/safety/optional unwrap operator on null pointer.zig +++ b/test/cases/safety/optional unwrap operator on null pointer.zig @@ -1,9 +1,11 @@ const std = @import("std"); pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { - _ = message; _ = stack_trace; - std.process.exit(0); + if (std.mem.eql(u8, message, "attempt to use null value")) { + std.process.exit(0); + } + std.process.exit(1); } pub fn main() !void { var ptr: ?*i32 = null; @@ -12,5 +14,5 @@ pub fn main() !void { return error.TestFailed; } // run -// backend=stage1 +// backend=llvm // target=native diff --git a/test/cases/safety/out of bounds slice access.zig b/test/cases/safety/out of bounds slice access.zig index 8c95978d4a5c3cd0aa779a124903af8f4d094586..a30532aee78c677c6feb157876fb789c60c590a2 100644 --- a/test/cases/safety/out of bounds slice access.zig +++ b/test/cases/safety/out of bounds slice access.zig @@ -1,9 +1,11 @@ const std = @import("std"); pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { - _ = message; _ = stack_trace; - std.process.exit(0); + if (std.mem.eql(u8, message, "attempt to index out of bound: index 4, len 4")) { + std.process.exit(0); + } + std.process.exit(1); } pub fn main() !void { const a = [_]i32{1, 2, 3, 4}; @@ -15,5 +17,5 @@ fn bar(a: []const i32) i32 { } fn baz(_: i32) void { } // run -// backend=stage1 -// target=native \ No newline at end of file +// backend=llvm +// target=native diff --git a/test/cases/safety/signed shift left overflow.zig b/test/cases/safety/signed shift left overflow.zig index 88adbe5835b1090b9d663603012a830989d12c44..75e97110328bcbcf913809cb77e9da0c768efdf3 100644 --- a/test/cases/safety/signed shift left overflow.zig +++ b/test/cases/safety/signed shift left overflow.zig @@ -1,9 +1,11 @@ const std = @import("std"); pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { - _ = message; _ = stack_trace; - std.process.exit(0); + if (std.mem.eql(u8, message, "left shift overflowed bits")) { + std.process.exit(0); + } + std.process.exit(1); } pub fn main() !void { @@ -15,5 +17,5 @@ fn shl(a: i16, b: u4) i16 { return @shlExact(a, b); } // run -// backend=stage1 -// target=native \ No newline at end of file +// backend=llvm +// target=native diff --git a/test/cases/safety/truncating vector cast.zig b/test/cases/safety/truncating vector cast.zig index b0a3c4e25b6e22a56c940a1fafec1923c056d1a3..5985952e022041260bd949ae22c78cdda293aaa3 100644 --- a/test/cases/safety/truncating vector cast.zig +++ b/test/cases/safety/truncating vector cast.zig @@ -16,5 +16,5 @@ pub fn main() !void { } // run -// backend=stage1 +// backend=llvm // target=native diff --git a/test/cases/safety/unreachable.zig b/test/cases/safety/unreachable.zig new file mode 100644 index 0000000000000000000000000000000000000000..f752016aad6dffafa1ebf766b14f95dac316af8f --- /dev/null +++ b/test/cases/safety/unreachable.zig @@ -0,0 +1,15 @@ +const std = @import("std"); + +pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { + _ = stack_trace; + if (std.mem.eql(u8, message, "reached unreachable code")) { + std.process.exit(0); + } + std.process.exit(1); +} +pub fn main() !void { + unreachable; +} +// run +// backend=llvm +// target=native diff --git a/test/cases/safety/unsigned integer not fitting in cast to signed integer - same bit count.zig b/test/cases/safety/unsigned integer not fitting in cast to signed integer - same bit count.zig index 9bf36b07c9ac680f0ebef1b89654a8d4fcbc7a2d..ca901560f04858f9f8fecaadebe53a747adf5069 100644 --- a/test/cases/safety/unsigned integer not fitting in cast to signed integer - same bit count.zig +++ b/test/cases/safety/unsigned integer not fitting in cast to signed integer - same bit count.zig @@ -1,9 +1,11 @@ const std = @import("std"); pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { - _ = message; _ = stack_trace; - std.process.exit(0); + if (std.mem.eql(u8, message, "integer cast truncated bits")) { + std.process.exit(0); + } + std.process.exit(1); } pub fn main() !void { var value: u8 = 245; @@ -12,5 +14,5 @@ pub fn main() !void { return error.TestFailed; } // run -// backend=stage1 -// target=native \ No newline at end of file +// backend=llvm +// target=native diff --git a/test/cases/safety/unsigned shift left overflow.zig b/test/cases/safety/unsigned shift left overflow.zig index 73c4292cdf0cb0ccbf124b425be17346ed56dc30..9d6b6a3c48c3199e5a466f875a88886488d3b54d 100644 --- a/test/cases/safety/unsigned shift left overflow.zig +++ b/test/cases/safety/unsigned shift left overflow.zig @@ -1,9 +1,11 @@ const std = @import("std"); pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { - _ = message; _ = stack_trace; - std.process.exit(0); + if (std.mem.eql(u8, message, "left shift overflowed bits")) { + std.process.exit(0); + } + std.process.exit(1); } pub fn main() !void { @@ -15,5 +17,5 @@ fn shl(a: u16, b: u4) u16 { return @shlExact(a, b); } // run -// backend=stage1 -// target=native \ No newline at end of file +// backend=llvm +// target=native diff --git a/test/cases/safety/unsigned-signed vector cast.zig b/test/cases/safety/unsigned-signed vector cast.zig index c78ec2c73ffbb342bb29895d8690c6749985ffa7..eb3995269f721548a0591859fa5fabba28fc99cd 100644 --- a/test/cases/safety/unsigned-signed vector cast.zig +++ b/test/cases/safety/unsigned-signed vector cast.zig @@ -16,5 +16,5 @@ pub fn main() !void { } // run -// backend=stage1 +// backend=llvm // target=native diff --git a/test/cases/safety/unwrap error.zig b/test/cases/safety/unwrap error.zig index ee9a502ebdf37bf8b10b54058861304d35efc989..498461976d4961509b3ea3e937b0129119d1c3ef 100644 --- a/test/cases/safety/unwrap error.zig +++ b/test/cases/safety/unwrap error.zig @@ -15,5 +15,5 @@ fn bar() !void { return error.Whatever; } // run -// backend=stage1 -// target=native \ No newline at end of file +// backend=llvm +// target=native diff --git a/test/cases/safety/value does not fit in shortening cast - u0.zig b/test/cases/safety/value does not fit in shortening cast - u0.zig index 072be45731e2ce9cb2bbd79aca74df25efc081b4..3ff3aa6e6c74f9f0151b888ad04931afe7446e00 100644 --- a/test/cases/safety/value does not fit in shortening cast - u0.zig +++ b/test/cases/safety/value does not fit in shortening cast - u0.zig @@ -1,9 +1,11 @@ const std = @import("std"); pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { - _ = message; _ = stack_trace; - std.process.exit(0); + if (std.mem.eql(u8, message, "integer cast truncated bits")) { + std.process.exit(0); + } + std.process.exit(1); } pub fn main() !void { @@ -15,5 +17,5 @@ fn shorten_cast(x: u8) u0 { return @intCast(u0, x); } // run -// backend=stage1 -// target=native \ No newline at end of file +// backend=llvm +// target=native diff --git a/test/cases/safety/value does not fit in shortening cast.zig b/test/cases/safety/value does not fit in shortening cast.zig index 7188c9a8469303bdece4339c90ff0d897d4741bf..510273a57bd626eb92cae6725ef92a7a768e6a10 100644 --- a/test/cases/safety/value does not fit in shortening cast.zig +++ b/test/cases/safety/value does not fit in shortening cast.zig @@ -1,9 +1,11 @@ const std = @import("std"); pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { - _ = message; _ = stack_trace; - std.process.exit(0); + if (std.mem.eql(u8, message, "integer cast truncated bits")) { + std.process.exit(0); + } + std.process.exit(1); } pub fn main() !void { @@ -15,5 +17,5 @@ fn shorten_cast(x: i32) i8 { return @intCast(i8, x); } // run -// backend=stage1 -// target=native \ No newline at end of file +// backend=llvm +// target=native diff --git a/test/cases/safety/vector integer addition overflow.zig b/test/cases/safety/vector integer addition overflow.zig index 5eedc869e708bdac9232d8739c0ad8b488a844fd..7e34fa9393926d89400a2fd4b664673577ebd826 100644 --- a/test/cases/safety/vector integer addition overflow.zig +++ b/test/cases/safety/vector integer addition overflow.zig @@ -1,9 +1,11 @@ const std = @import("std"); pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { - _ = message; _ = stack_trace; - std.process.exit(0); + if (std.mem.eql(u8, message, "integer overflow")) { + std.process.exit(0); + } + std.process.exit(1); } pub fn main() !void { 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) { return a + b; } // run -// backend=stage1 -// target=native \ No newline at end of file +// backend=llvm +// target=native diff --git a/test/cases/safety/vector integer multiplication overflow.zig b/test/cases/safety/vector integer multiplication overflow.zig index 5d247cf5457ef7092f3d626fa8be4ef191fb83c1..a2a74072b3b2eed6b737056302e2698028d5c6da 100644 --- a/test/cases/safety/vector integer multiplication overflow.zig +++ b/test/cases/safety/vector integer multiplication overflow.zig @@ -1,9 +1,11 @@ const std = @import("std"); pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { - _ = message; _ = stack_trace; - std.process.exit(0); + if (std.mem.eql(u8, message, "integer overflow")) { + std.process.exit(0); + } + std.process.exit(1); } pub fn main() !void { 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) { return a * b; } // run -// backend=stage1 -// target=native \ No newline at end of file +// backend=llvm +// target=native diff --git a/test/cases/safety/vector integer negation overflow.zig b/test/cases/safety/vector integer negation overflow.zig index 03d846aab06224aaac24030033891e1678054fc3..7f59982372073a40d83e0192fc37c909ddbdc7c7 100644 --- a/test/cases/safety/vector integer negation overflow.zig +++ b/test/cases/safety/vector integer negation overflow.zig @@ -1,9 +1,11 @@ const std = @import("std"); pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { - _ = message; _ = stack_trace; - std.process.exit(0); + if (std.mem.eql(u8, message, "integer overflow")) { + std.process.exit(0); + } + std.process.exit(1); } pub fn main() !void { var a: @Vector(4, i16) = [_]i16{ 1, -32768, 200, 4 }; @@ -15,5 +17,5 @@ fn neg(a: @Vector(4, i16)) @Vector(4, i16) { return -a; } // run -// backend=stage1 -// target=native \ No newline at end of file +// backend=llvm +// target=native diff --git a/test/cases/safety/vector integer subtraction overflow.zig b/test/cases/safety/vector integer subtraction overflow.zig index 72287ffd07e7f2d03f33e06216969cbed3544ff2..dbfee3af1e8a45e70cfadbfd19c2a6da993f0298 100644 --- a/test/cases/safety/vector integer subtraction overflow.zig +++ b/test/cases/safety/vector integer subtraction overflow.zig @@ -1,9 +1,11 @@ const std = @import("std"); pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn { - _ = message; _ = stack_trace; - std.process.exit(0); + if (std.mem.eql(u8, message, "integer overflow")) { + std.process.exit(0); + } + std.process.exit(1); } pub fn main() !void { 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) { return a - b; } // run -// backend=stage1 -// target=native \ No newline at end of file +// backend=llvm +// target=native -- 2.54.0