diff --git a/pkgs/racket-pkgs/racket-test/tests/racket/optimize.rktl b/pkgs/racket-pkgs/racket-test/tests/racket/optimize.rktl index 112a6ef69e..d9d9f70185 100644 --- a/pkgs/racket-pkgs/racket-test/tests/racket/optimize.rktl +++ b/pkgs/racket-pkgs/racket-test/tests/racket/optimize.rktl @@ -1389,6 +1389,10 @@ (a1) (a2)))) +(test-comp '(lambda (x) (let ([r (something)]) + (if r #t (something-else)))) + '(lambda (x) (if (something) #t (something-else)))) + (test-comp '(if (let ([z (random)]) null) 1 2) '(if (let ([z (random)]) #t) 1 2)) diff --git a/racket/src/racket/src/optimize.c b/racket/src/racket/src/optimize.c index 5c35f3c0c2..2e852a68f0 100644 --- a/racket/src/racket/src/optimize.c +++ b/racket/src/racket/src/optimize.c @@ -6701,7 +6701,8 @@ Scheme_Object *scheme_optimize_expr(Scheme_Object *expr, Optimize_Info *info, in if (SAME_TYPE(SCHEME_TYPE(val), scheme_once_used_type)) { Scheme_Once_Used *o = (Scheme_Once_Used *)val; if (((o->vclock == info->vclock) - && single_valued_noncm_expression(o->expr, 5)) + && ((context & OPT_CONTEXT_BOOLEAN) + || single_valued_noncm_expression(o->expr, 5))) || movable_expression(o->expr, info, o->delta, o->cross_lambda, o->kclock != info->kclock, 0, 5)) {