Closed
Description
comptime {
@compileLog(@trunc(@as(f32, 1) / @as(f32, 0)));
@compileLog(@floor(@as(f32, 1) / @as(f32, 0)));
}
comptime {
_ = @as(comptime_float, 1) / @as(comptime_float, 0);
}
comptime {
_ = @divTrunc(@as(f32, 1), @as(f32, 0));
}
comptime {
_ = @divFloor(@as(f32, 1), @as(f32, 0));
}
comptime {
_ = @rem(@as(f32, 1), @as(f32, 0));
}
comptime {
_ = @mod(@as(f32, 1), @as(f32, 0));
}
$ zig build-obj repro.zig
repro.zig:6:34: error: division by zero here causes undefined behavior
_ = @as(comptime_float, 1) / @as(comptime_float, 0);
^~~~~~~~~~~~~~~~~~~~~~
referenced by:
root: lib/std/start.zig:3:22
comptime: lib/std/start.zig:27:9
2 reference(s) hidden; use '-freference-trace=4' to see all references
repro.zig:9:32: error: division by zero here causes undefined behavior
_ = @divTrunc(@as(f32, 1), @as(f32, 0));
^~~~~~~~~~~
repro.zig:12:32: error: division by zero here causes undefined behavior
_ = @divFloor(@as(f32, 1), @as(f32, 0));
^~~~~~~~~~~
repro.zig:15:27: error: division by zero here causes undefined behavior
_ = @rem(@as(f32, 1), @as(f32, 0));
^~~~~~~~~~~
repro.zig:18:27: error: division by zero here causes undefined behavior
_ = @mod(@as(f32, 1), @as(f32, 0));
^~~~~~~~~~~
Compile Log Output:
@as(f32, inf)
@as(f32, inf)
Float division by zero has perfectly well defined behavior in strict float mode.
As an added bonus for fixing this bug, you can delete the lines in test/behavior/x86_64/math.zig
referencing this issue!