diff --git a/pkgs/racket-pkgs/racket-test/tests/racket/optimize.rktl b/pkgs/racket-pkgs/racket-test/tests/racket/optimize.rktl index 31c3883cbf..35fd0e5bcf 100644 --- a/pkgs/racket-pkgs/racket-test/tests/racket/optimize.rktl +++ b/pkgs/racket-pkgs/racket-test/tests/racket/optimize.rktl @@ -1328,6 +1328,18 @@ (a1) (a2)))) +(test-comp '(if (let ([z (random)]) null) 1 2) + '(if (let ([z (random)]) #t) 1 2)) + +(test-comp '(if (if (list? (cons 1 null)) null (void)) 1 2) + '1) + +(test-comp '(if (if (list? (cons 1 null)) 7 8) 1 2) + '1) + +(test-comp '(if (if (list? (cons 1 null)) #t #t) 1 2) + '1) + (test-comp '(lambda (y) (let ([f (lambda (x) x)]) (if f diff --git a/racket/src/racket/src/optimize.c b/racket/src/racket/src/optimize.c index 91a3877fef..c913239d4b 100644 --- a/racket/src/racket/src/optimize.c +++ b/racket/src/racket/src/optimize.c @@ -6409,7 +6409,12 @@ Scheme_Object *scheme_optimize_expr(Scheme_Object *expr, Optimize_Info *info, in return module_optimize(expr, info, context); default: info->size += 1; - return expr; + if ((context & OPT_CONTEXT_BOOLEAN) + && (SCHEME_TYPE(expr) > _scheme_compiled_values_types_) + && SCHEME_TRUEP(expr)) + return scheme_true; + else + return expr; } }