diff --git a/pkgs/racket-test-core/tests/racket/optimize.rktl b/pkgs/racket-test-core/tests/racket/optimize.rktl index 487a7f7171..6959c90140 100644 --- a/pkgs/racket-test-core/tests/racket/optimize.rktl +++ b/pkgs/racket-test-core/tests/racket/optimize.rktl @@ -4039,6 +4039,13 @@ (check-number-op-unary 'sub1) (check-number-op-unary 'abs)) +;; `abs` wants and produces reals, not arbitrary numbers: +(test-comp '(lambda (x) (when (number? x) (abs x)) 5) + '(lambda (x) 5) + #f) +(test-comp '(lambda (x) (real? (abs x))) + '(lambda (x) (abs x) #t)) + (test-comp '(lambda () (-) (void)) '(lambda () (void)) #f) diff --git a/racket/src/racket/src/numarith.c b/racket/src/racket/src/numarith.c index 6f1aac3921..0da581b917 100644 --- a/racket/src/racket/src/numarith.c +++ b/racket/src/racket/src/numarith.c @@ -124,9 +124,9 @@ void scheme_init_numarith(Scheme_Startup_Env *env) p = scheme_make_folding_prim(scheme_abs, "abs", 1, 1, 1); SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_WANTS_NUMBER + | SCHEME_PRIM_WANTS_REAL | SCHEME_PRIM_OMITTABLE_ON_GOOD_ARGS - | SCHEME_PRIM_PRODUCES_NUMBER + | SCHEME_PRIM_PRODUCES_REAL | SCHEME_PRIM_CLOSED_ON_REALS); scheme_addto_prim_instance("abs", p, env);