diff --git a/pkgs/racket-test-core/tests/racket/module.rktl b/pkgs/racket-test-core/tests/racket/module.rktl index 06d47e897f..b1dcae80e8 100644 --- a/pkgs/racket-test-core/tests/racket/module.rktl +++ b/pkgs/racket-test-core/tests/racket/module.rktl @@ -3397,4 +3397,21 @@ case of module-leve bindings; it doesn't cover local bindings. ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(module regression-test-for-delayed-set!-after-direct-use racket/base + (define align + (lambda () + 'ok)) + + (define strings-are-numbers + (let-values ([(real-align) align]) + (lambda () + (set! align 7) + real-align))) + + (void (strings-are-numbers))) + +(dynamic-require ''regression-test-for-delayed-set!-after-direct-use #f) + +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + (report-errs) diff --git a/racket/src/cs/schemified/schemify.scm b/racket/src/cs/schemified/schemify.scm index 05fb508e3e..f6594de050 100644 --- a/racket/src/cs/schemified/schemify.scm +++ b/racket/src/cs/schemified/schemify.scm @@ -19213,9 +19213,16 @@ ids_0 (lambda () (begin - (hash-remove! - mutated_0 - v_1) + (if (eq? + (hash-ref + mutated_0 + v_1 + #f) + state_0) + (hash-remove! + mutated_0 + v_1) + (void)) (|#%app| state_0)))) (begin diff --git a/racket/src/schemify/mutated.rkt b/racket/src/schemify/mutated.rkt index 0209c7abf1..7aa489c583 100644 --- a/racket/src/schemify/mutated.rkt +++ b/racket/src/schemify/mutated.rkt @@ -221,7 +221,8 @@ [ids ;; Chain delays (delay! ids (lambda () - (hash-remove! mutated v) + (when (eq? (hash-ref mutated v #f) state) + (hash-remove! mutated v)) (state)))] [else (hash-remove! mutated v)