Commit 06ae13fe35

Marc Tiehuis <marc@tiehu.is>
2022-01-14 14:52:34
stage1: fix bigint_init_bigfloat for single-limb negative floats
Fixes #10592.
1 parent dafbc6e
Changed files (2)
src
stage1
test
behavior
src/stage1/bigint.cpp
@@ -219,7 +219,7 @@ void bigint_init_bigfloat(BigInt *dest, const BigFloat *op) {
     ui64_to_f128M(UINT64_MAX, &max_u64);
     if (f128M_le(&abs_val, &max_u64)) {
         dest->digit_count = 1;
-        dest->data.digit = f128M_to_ui64(&op->value, softfloat_round_minMag, false);
+        dest->data.digit = f128M_to_ui64(&abs_val, softfloat_round_minMag, false);
         bigint_normalize(dest);
         return;
     }
test/behavior/floatop.zig
@@ -66,3 +66,9 @@ fn testDifferentSizedFloatComparisons() !void {
 //    try expect(@nearbyint(a) == -4);
 //    }
 //}
+
+test "negative f128 floatToInt at compile-time" {
+    const a: f128 = -2;
+    var b = @floatToInt(i64, a);
+    try expect(@as(i64, -2) == b);
+}