authorgravatar for 33978857+m-radomski@users.noreply.github.comMateusz Radomski <33978857+m-radomski@users.noreply.github.com> 2022-02-04 06:58:27+01:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2022-02-04 00:58:27-05:00
log1b6a1e691fab75ce40c9d0c4015c9f4a46b72aa4
treecdd0aa2589adb364b8411c95a5d8d2fe71c17269
parent0893326e0ea9b261c5d334067c294c7d8972d5a1
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

Sema: check for NaNs in cmp (#10760)


2 files changed, 9 insertions(+), 4 deletions(-)

src/Sema.zig+7
......@@ -15816,6 +15816,13 @@ fn cmpNumeric(
1581615816 if (lhs_val.isUndef() or rhs_val.isUndef()) {
1581715817 return sema.addConstUndef(Type.bool);
1581815818 }
15819 if (lhs_val.isNan() or rhs_val.isNan()) {
15820 if (op == std.math.CompareOperator.neq) {
15821 return Air.Inst.Ref.bool_true;
15822 } else {
15823 return Air.Inst.Ref.bool_false;
15824 }
15825 }
1581915826 if (Value.compareHetero(lhs_val, op, rhs_val)) {
1582015827 return Air.Inst.Ref.bool_true;
1582115828 } else {
test/behavior/math.zig+2-4
......@@ -979,18 +979,16 @@ test "vector integer addition" {
979979}
980980
981981test "NaN comparison" {
982 if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO
983
984982 try testNanEqNan(f16);
985983 try testNanEqNan(f32);
986984 try testNanEqNan(f64);
987985 try testNanEqNan(f128);
988 if (has_f80_rt) try testNanEqNan(f80);
986 if (has_f80_rt and (builtin.zig_backend == .stage1)) try testNanEqNan(f80); // TODO
989987 comptime try testNanEqNan(f16);
990988 comptime try testNanEqNan(f32);
991989 comptime try testNanEqNan(f64);
992990 comptime try testNanEqNan(f128);
993 // comptime try testNanEqNan(f80);
991 // comptime try testNanEqNan(f80); // TODO
994992}
995993
996994fn testNanEqNan(comptime F: type) !void {