| ... | @@ -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 | ); |
| 507 | | 507 | |
| | 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 | ); |
| 571 | | 586 | |
| | 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 | ); |
| 584 | | 613 | |
| | 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 { |