diff --git a/pkgs/racket-test-core/tests/racket/optimize.rktl b/pkgs/racket-test-core/tests/racket/optimize.rktl index 09dcc34a5f..6e434d5cd3 100644 --- a/pkgs/racket-test-core/tests/racket/optimize.rktl +++ b/pkgs/racket-test-core/tests/racket/optimize.rktl @@ -152,6 +152,10 @@ '(if (pair? null) 89 88)) (test-comp 89 '(if (list? null) 89 88)) +(test-comp 0 + '(length '())) +(test-comp 3 + '(length '(1 2 3))) (test-comp '(lambda (x) (if x 2 1)) '(lambda (x) (if (not x) 1 2))) diff --git a/racket/src/racket/src/optimize.c b/racket/src/racket/src/optimize.c index e37fb351c7..7ab318c16c 100644 --- a/racket/src/racket/src/optimize.c +++ b/racket/src/racket/src/optimize.c @@ -4520,6 +4520,12 @@ static Scheme_Object *finish_optimize_application2(Scheme_App2_Rec *app, Optimiz } } + if (IS_NAMED_PRIM(rator, "length") + && SCHEME_LISTP(rand)) { + alt = scheme_make_integer(scheme_list_length(rand)); + return replace_tail_inside(alt, inside, app->rand); + } + alt = try_reduce_predicate(rator, rand, info); if (alt) return replace_tail_inside(alt, inside, app->rand);