authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-04-05 17:44:34-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-04-05 18:34:31-04:00
log5597b11a527b4495bcb3001211e6ee3923c00f87
treea568cbd30c5b997b40de6f72a9caaae51705654e
parentf6cdc94a50235eaf145f6c2c2ec257008d592494
signature Commit is signed but in an unrecognized format.

add runtime safety tests for SIMD integer division


1 files changed, 43 insertions(+), 0 deletions(-)

test/runtime_safety.zig+43
...@@ -505,6 +505,21 @@ pub fn addCases(cases: *tests.CompareOutputContext) void {...@@ -505,6 +505,21 @@ pub fn addCases(cases: *tests.CompareOutputContext) void {
505 \\}505 \\}
506 );506 );
507507
508 cases.addRuntimeSafety("signed integer division overflow - vectors",
509 \\pub fn panic(message: []const u8, stack_trace: ?*@import("builtin").StackTrace) noreturn {
510 \\ @import("std").os.exit(126);
511 \\}
512 \\pub fn main() !void {
513 \\ var a: @Vector(4, i16) = [_]i16{ 1, 2, -32768, 4 };
514 \\ var b: @Vector(4, i16) = [_]i16{ 1, 2, -1, 4 };
515 \\ const x = div(a, b);
516 \\ if (x[2] == 32767) return error.Whatever;
517 \\}
518 \\fn div(a: @Vector(4, i16), b: @Vector(4, i16)) @Vector(4, i16) {
519 \\ return @divTrunc(a, b);
520 \\}
521 );
522
508 cases.addRuntimeSafety("signed shift left overflow",523 cases.addRuntimeSafety("signed shift left overflow",
509 \\pub fn panic(message: []const u8, stack_trace: ?*@import("builtin").StackTrace) noreturn {524 \\pub fn panic(message: []const u8, stack_trace: ?*@import("builtin").StackTrace) noreturn {
510 \\ @import("std").os.exit(126);525 \\ @import("std").os.exit(126);
...@@ -569,6 +584,20 @@ pub fn addCases(cases: *tests.CompareOutputContext) void {...@@ -569,6 +584,20 @@ pub fn addCases(cases: *tests.CompareOutputContext) void {
569 \\}584 \\}
570 );585 );
571586
587 cases.addRuntimeSafety("integer division by zero - vectors",
588 \\pub fn panic(message: []const u8, stack_trace: ?*@import("builtin").StackTrace) noreturn {
589 \\ @import("std").os.exit(126);
590 \\}
591 \\pub fn main() void {
592 \\ var a: @Vector(4, i32) = [4]i32{111, 222, 333, 444};
593 \\ var b: @Vector(4, i32) = [4]i32{111, 0, 333, 444};
594 \\ const x = div0(a, b);
595 \\}
596 \\fn div0(a: @Vector(4, i32), b: @Vector(4, i32)) @Vector(4, i32) {
597 \\ return @divTrunc(a, b);
598 \\}
599 );
600
572 cases.addRuntimeSafety("exact division failure",601 cases.addRuntimeSafety("exact division failure",
573 \\pub fn panic(message: []const u8, stack_trace: ?*@import("builtin").StackTrace) noreturn {602 \\pub fn panic(message: []const u8, stack_trace: ?*@import("builtin").StackTrace) noreturn {
574 \\ @import("std").os.exit(126);603 \\ @import("std").os.exit(126);
...@@ -582,6 +611,20 @@ pub fn addCases(cases: *tests.CompareOutputContext) void {...@@ -582,6 +611,20 @@ pub fn addCases(cases: *tests.CompareOutputContext) void {
582 \\}611 \\}
583 );612 );
584613
614 cases.addRuntimeSafety("exact division failure - vectors",
615 \\pub fn panic(message: []const u8, stack_trace: ?*@import("builtin").StackTrace) noreturn {
616 \\ @import("std").os.exit(126);
617 \\}
618 \\pub fn main() !void {
619 \\ var a: @Vector(4, i32) = [4]i32{111, 222, 333, 444};
620 \\ var b: @Vector(4, i32) = [4]i32{111, 222, 333, 441};
621 \\ const x = divExact(a, b);
622 \\}
623 \\fn divExact(a: @Vector(4, i32), b: @Vector(4, i32)) @Vector(4, i32) {
624 \\ return @divExact(a, b);
625 \\}
626 );
627
585 cases.addRuntimeSafety("cast []u8 to bigger slice of wrong size",628 cases.addRuntimeSafety("cast []u8 to bigger slice of wrong size",
586 \\const std = @import("std");629 \\const std = @import("std");
587 \\pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn {630 \\pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn {