diff --git a/pkgs/racket-test-core/tests/racket/optimize.rktl b/pkgs/racket-test-core/tests/racket/optimize.rktl index 19c0e5b6fa..5cceb2ea3d 100644 --- a/pkgs/racket-test-core/tests/racket/optimize.rktl +++ b/pkgs/racket-test-core/tests/racket/optimize.rktl @@ -3893,6 +3893,20 @@ (test-comp '(letrec-values ([(x y) (error "oops")]) 11) '(error "oops")) +(test-comp '(with-continuation-mark + 'x 'y + (let-values ([() (with-continuation-mark + 'x 'z + (error "oops"))]) + 11)) + '(with-continuation-mark + 'x 'y + (begin0 + (with-continuation-mark + 'x 'z + (error "oops")) + (void)))) + (test-comp `(module m racket/base (define x 5) (set! x 3) diff --git a/racket/src/racket/src/optimize.c b/racket/src/racket/src/optimize.c index a9361c282f..6405bb0d05 100644 --- a/racket/src/racket/src/optimize.c +++ b/racket/src/racket/src/optimize.c @@ -7850,7 +7850,7 @@ static Scheme_Object *optimize_lets(Scheme_Object *form, Optimize_Info *info, in if (!found_escapes) { body = scheme_optimize_expr(body, body_info, scheme_optimize_tail_context(context)); } else { - body = escape_body; + body = ensure_noncm(escape_body); body_info->single_result = 1; body_info->preserves_marks = 1; body_info->escapes = 1;