zig icon indicating copy to clipboard operation
zig copied to clipboard

elide safety checks sometimes for integer division by zero and integer division overflow

Open andrewrk opened this issue 3 years ago • 0 comments

In theory we could sometimes take advantage of SIGFPE for our integer division by zero safety check:

test "integer division by zero" {
    @setRuntimeSafety(false);
    var x: i32 = 10;
    var y: i32 = 0;
    var z = x / y;
    _ = z;
}
$ stage3/bin/zig test test3.zig 
Test [1/1] test.integer division by zero... Arithmetic exception at address 0x20de9a
./test3.zig:5:5: 0x20de9a in test.integer division by zero (test)
    var z = x / y;
    ^

However, we still need safety checks sometimes, in the case of:

  • architectures that do not have such exceptions for integer division
  • LLVM, which declares integer division by zero as undefined behavior

andrewrk avatar Jul 28 '22 23:07 andrewrk