diff --git a/collects/tests/typed-racket/optimizer/tests/invalid-fxquotient.rkt b/collects/tests/typed-racket/optimizer/tests/invalid-fxquotient.rkt new file mode 100644 index 0000000000..76fbfbac4f --- /dev/null +++ b/collects/tests/typed-racket/optimizer/tests/invalid-fxquotient.rkt @@ -0,0 +1,11 @@ +#; +( +TR missed opt: invalid-fxquotient.rkt 10:21 (quotient fixnum-min -1) -- out of fixnum range +#f +) + +#lang typed/racket/base + +(define: fixnum-min : Nonpositive-Fixnum (assert (- (expt 2 30)) fixnum?)) +(define: q : Natural (quotient fixnum-min -1)) ; this can't be optimized safely +(fixnum? q) ; should return #f diff --git a/collects/typed-racket/base-env/base-env-numeric.rkt b/collects/typed-racket/base-env/base-env-numeric.rkt index 6d2b9db15b..5e12031db4 100644 --- a/collects/typed-racket/base-env/base-env-numeric.rkt +++ b/collects/typed-racket/base-env/base-env-numeric.rkt @@ -1336,7 +1336,7 @@ ;; we don't have equivalent for fixnums: ;; (quotient min-fixnum -1) -> max-fixnum + 1 (commutative-binop -NonNegFixnum -NonPosFixnum -NonPosFixnum) - (-NonPosFixnum -NonPosFixnum . -> . -NonNegFixnum) + (-NonPosFixnum -NonPosFixnum . -> . -Nat) (-NonNegFixnum -Nat . -> . -NonNegFixnum) (-NonNegFixnum -Int . -> . -Fixnum) (binop -Nat)