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
signaturelock-open 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 {
505505 \\}
506506 );
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
508523 cases.addRuntimeSafety("signed shift left overflow",
509524 \\pub fn panic(message: []const u8, stack_trace: ?*@import("builtin").StackTrace) noreturn {
510525 \\ @import("std").os.exit(126);
......@@ -569,6 +584,20 @@ pub fn addCases(cases: *tests.CompareOutputContext) void {
569584 \\}
570585 );
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
572601 cases.addRuntimeSafety("exact division failure",
573602 \\pub fn panic(message: []const u8, stack_trace: ?*@import("builtin").StackTrace) noreturn {
574603 \\ @import("std").os.exit(126);
......@@ -582,6 +611,20 @@ pub fn addCases(cases: *tests.CompareOutputContext) void {
582611 \\}
583612 );
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
585628 cases.addRuntimeSafety("cast []u8 to bigger slice of wrong size",
586629 \\const std = @import("std");
587630 \\pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace) noreturn {