diff --git a/pkgs/racket-test-core/tests/racket/optimize.rktl b/pkgs/racket-test-core/tests/racket/optimize.rktl index 2a15f5a981..5469197024 100644 --- a/pkgs/racket-test-core/tests/racket/optimize.rktl +++ b/pkgs/racket-test-core/tests/racket/optimize.rktl @@ -7132,6 +7132,21 @@ (f (+ 6.0 (one)) (+ 6.0 (one))))) +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Regression test to checking inlingin with `set!`: + +(module check-inline-of-set!-expression racket/base + (require racket/performance-hint) + (begin-encourage-inline + (define (f x) + (let ([y 0]) + (set! y (+ y x)) + y))) + (define result (list (f 1) (f 2))) + (provide result)) + +(test '(1 2) dynamic-require ''check-inline-of-set!-expression 'result) + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (report-errs) diff --git a/racket/src/cs/schemified/schemify.scm b/racket/src/cs/schemified/schemify.scm index faa5b1c912..e4efda2b5c 100644 --- a/racket/src/cs/schemified/schemify.scm +++ b/racket/src/cs/schemified/schemify.scm @@ -12722,10 +12722,12 @@ (values id_1 rhs_0))))))) (case-lambda ((id_0 rhs_0) - (list - 'set! - id_0 - (clone-expr rhs_0 env_0 mutated_0))) + (let ((app_0 + (clone-expr id_0 env_0 mutated_0))) + (list + 'set! + app_0 + (clone-expr rhs_0 env_0 mutated_0)))) (args (raise-binding-result-arity-error 2 args)))) (if (if (eq? '|#%variable-reference| hd_0) diff --git a/racket/src/schemify/inline.rkt b/racket/src/schemify/inline.rkt index 3098caa5b6..5079754545 100644 --- a/racket/src/schemify/inline.rkt +++ b/racket/src/schemify/inline.rkt @@ -207,7 +207,7 @@ [`(begin-unsafe ,exps ...) `(begin-unsafe . ,(clone-body exps env mutated))] [`(set! ,id ,rhs) - `(set! ,id ,(clone-expr rhs env mutated))] + `(set! ,(clone-expr id env mutated) ,(clone-expr rhs env mutated))] [`(#%variable-reference) v] [`(#%variable-reference ,id) `(#%variable-reference ,(clone-expr id env mutated))]