diff --git a/pkgs/racket-test-core/tests/racket/optimize.rktl b/pkgs/racket-test-core/tests/racket/optimize.rktl index a862deec57..71ef7356d6 100644 --- a/pkgs/racket-test-core/tests/racket/optimize.rktl +++ b/pkgs/racket-test-core/tests/racket/optimize.rktl @@ -2535,6 +2535,25 @@ (test-reduce 'k:list-pair? '(cdr (list 1)) #f) ) +(test-comp '(lambda (z) + (when (and (list? z) (pair? z)) + (list? (cdr z)))) + '(lambda (z) + (when (and (list? z) (pair? z)) + #t))) +(test-comp '(lambda (z) + (when (list? z) + (list? (unsafe-cdr z)))) + '(lambda (z) + (when (list? z) + #t))) +(test-comp '(lambda (z) + (when (list? z) + (list? (cdr z)))) + '(lambda (z) + (when (list? z) + (begin (cdr z) #t)))) + (let ([test-bin (lambda (bin-name) (test-comp `(lambda (z) diff --git a/racket/src/racket/src/optimize.c b/racket/src/racket/src/optimize.c index 150b5564bf..e140ae8b1e 100644 --- a/racket/src/racket/src/optimize.c +++ b/racket/src/racket/src/optimize.c @@ -3441,7 +3441,7 @@ static Scheme_Object *do_expr_implies_predicate(Scheme_Object *expr, Optimize_In || SAME_OBJ(app->rator, scheme_unsafe_cdr_proc)) { Scheme_Object *p; p = do_expr_implies_predicate(app->rand, info, NULL, fuel-1, ignore_vars); - if (SAME_OBJ(p, scheme_list_pair_p_proc)) + if (predicate_implies(p, scheme_list_p_proc)) return scheme_list_p_proc; }