diff --git a/pkgs/racket-test-core/tests/racket/optimize.rktl b/pkgs/racket-test-core/tests/racket/optimize.rktl index 871cd3eb7e..0862e3d3f5 100644 --- a/pkgs/racket-test-core/tests/racket/optimize.rktl +++ b/pkgs/racket-test-core/tests/racket/optimize.rktl @@ -4525,6 +4525,17 @@ (f i #f)))) (collect-garbage) +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Check that `#%variable-reference` inlines ok: + +(let ([go + (lambda () + (define foo 3) + (#%variable-reference foo))]) + (define v (list (go) (go))) + (set! v v) + (test '(#t #t) map variable-reference? v)) + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (report-errs) diff --git a/racket/src/racket/src/optimize.c b/racket/src/racket/src/optimize.c index b7557cab78..7289a04cb2 100644 --- a/racket/src/racket/src/optimize.c +++ b/racket/src/racket/src/optimize.c @@ -4343,7 +4343,7 @@ ref_clone(int dup_ok, Scheme_Object *data, Optimize_Info *info, int delta, int c if (!a) return NULL; b = SCHEME_PTR2_VAL(data); - b = optimize_clone(dup_ok, a, info, delta, closure_depth); + b = optimize_clone(dup_ok, b, info, delta, closure_depth); if (!b) return NULL; naya = scheme_alloc_object();