diff --git a/pkgs/racket-pkgs/racket-test/tests/racket/optimize.rktl b/pkgs/racket-pkgs/racket-test/tests/racket/optimize.rktl index 2e98e73706..26c003c6b2 100644 --- a/pkgs/racket-pkgs/racket-test/tests/racket/optimize.rktl +++ b/pkgs/racket-pkgs/racket-test/tests/racket/optimize.rktl @@ -1335,6 +1335,9 @@ (quote-syntax no!)) ''ok) +(test-comp '(lambda (x) (not (if x #f 2))) + '(lambda (x) (not (if x #f #t)))) + (test-comp '(lambda (x) (if x x #f)) '(lambda (x) x)) (test-comp '(lambda (x) (if (cons 1 x) 78 78)) diff --git a/racket/src/racket/src/optimize.c b/racket/src/racket/src/optimize.c index 17178702cf..529152b012 100644 --- a/racket/src/racket/src/optimize.c +++ b/racket/src/racket/src/optimize.c @@ -2724,7 +2724,7 @@ static Scheme_Object *optimize_application2(Scheme_Object *o, Optimize_Info *inf if (le) return le; - le = scheme_optimize_expr(app->rator, info, sub_context); + le = scheme_optimize_expr(app->rator, info, 0); app->rator = le; { @@ -2734,9 +2734,13 @@ static Scheme_Object *optimize_application2(Scheme_Object *o, Optimize_Info *inf return le; } - ty = wants_local_type_arguments(app->rator, 0); - if (ty) - sub_context |= (ty << OPT_CONTEXT_TYPE_SHIFT); + if (SAME_PTR(scheme_not_prim, app->rator)){ + sub_context = OPT_CONTEXT_BOOLEAN; + } else { + ty = wants_local_type_arguments(app->rator, 0); + if (ty) + sub_context |= (ty << OPT_CONTEXT_TYPE_SHIFT); + } le = scheme_optimize_expr(app->rand, info, sub_context); app->rand = le;