diff --git a/pkgs/racket-test-core/tests/racket/optimize.rktl b/pkgs/racket-test-core/tests/racket/optimize.rktl index 78aede26e2..a862deec57 100644 --- a/pkgs/racket-test-core/tests/racket/optimize.rktl +++ b/pkgs/racket-test-core/tests/racket/optimize.rktl @@ -6371,4 +6371,40 @@ ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(module optimizes-to-with-immediate-continuation-mark-in-noninlined racket/base + (define (call/icm proc) + (call-with-immediate-continuation-mark + 'x + (lambda (v) + ;; The constant '(1 2 3) currently prevents inlining + (if (proc '(1 2 3)) + (proc v) + #f)))) + + (define (call/cm proc) + (if (zero? (random 1)) + (with-continuation-mark + 'x 'y + (proc)) + ;; disable inline: + '(3 4 5))) + + (define result + (let ([in? #f] + [result #f]) + (call/cm + (lambda () + (set! in? #t) + (call/icm + (lambda (v) + (set! result v))) + (set! in? #f))) + result)) + + (provide result)) + +(test #f dynamic-require ''optimizes-to-with-immediate-continuation-mark-in-noninlined 'result) + +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + (report-errs) diff --git a/racket/src/racket/src/optimize.c b/racket/src/racket/src/optimize.c index b79e9a992d..150b5564bf 100644 --- a/racket/src/racket/src/optimize.c +++ b/racket/src/racket/src/optimize.c @@ -6539,6 +6539,8 @@ with_immed_mark_optimize(Scheme_Object *data, Optimize_Info *info, int context) wcm->val = val; SCHEME_CDR(wcm->body) = body; + info->preserves_marks = 0; + return data; }