From 6b7a1842978c6a5ffa4d9c974249d172ffd6b65f Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Thu, 5 Nov 2020 17:24:54 -0700 Subject: [PATCH] bc: fix `gcd` on most negative fixnum Xsmith found this fixnum-boundary bug. Closes #3484 --- pkgs/racket-test-core/tests/racket/number.rktl | 4 ++++ racket/src/bc/src/number.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/pkgs/racket-test-core/tests/racket/number.rktl b/pkgs/racket-test-core/tests/racket/number.rktl index 0386cc5dc2..1ef8998506 100644 --- a/pkgs/racket-test-core/tests/racket/number.rktl +++ b/pkgs/racket-test-core/tests/racket/number.rktl @@ -1484,6 +1484,10 @@ (test 3.0 lcm 0.5 3) (test 3.0 lcm 1/2 3.0) +(test 4611686018427387904 gcd -4611686018427387904) +(test 4611686018427387904 gcd -4611686018427387904 -4611686018427387904) +(test 4611686018427387904 gcd -4611686018427387904 0) + (err/rt-test (gcd +nan.0)) (err/rt-test (gcd +inf.0)) (err/rt-test (gcd -inf.0)) diff --git a/racket/src/bc/src/number.c b/racket/src/bc/src/number.c index 0de0ff3a3c..eaee222337 100644 --- a/racket/src/bc/src/number.c +++ b/racket/src/bc/src/number.c @@ -2350,7 +2350,7 @@ scheme_bin_gcd (const Scheme_Object *n1, const Scheme_Object *n2) a = b; b = r; } - return (scheme_make_integer(a)); + return (scheme_make_integer_value(a)); } else if (!scheme_is_integer(n1) || !scheme_is_integer(n2)) { Scheme_Object *n1a, *n2a, *a[1], *num;