diff --git a/collects/tests/racket/syntax.rktl b/collects/tests/racket/syntax.rktl index 5508dc767b..9e1090275c 100644 --- a/collects/tests/racket/syntax.rktl +++ b/collects/tests/racket/syntax.rktl @@ -1353,7 +1353,24 @@ (syntax-case stx () [(_ v) (datum->syntax stx (kw/f #:x #'v opt))])) (kw/g 7)))) - + +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Check mutation of local define-for-syntax in let-syntax: + +(module set-local-dfs racket/base + (require (for-syntax racket/base)) + (provide ten) + + (define-for-syntax tl-var 9) + + (define ten + (let-syntax ([x1 (lambda (stx) + (set! tl-var (add1 tl-var)) + (datum->syntax stx tl-var))]) + (x1)))) + +(test 10 dynamic-require ''set-local-dfs 'ten) + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (report-errs) diff --git a/src/racket/src/env.c b/src/racket/src/env.c index 68fc08596e..f82162c125 100644 --- a/src/racket/src/env.c +++ b/src/racket/src/env.c @@ -3112,7 +3112,10 @@ scheme_lookup_binding(Scheme_Object *find_id, Scheme_Comp_Env *env, int flags, modpos, SCHEME_INT_VAL(mod_defn_phase)); } - if (!modname && (flags & (SCHEME_SETTING | SCHEME_REFERENCING)) && genv->module) { + if (!modname + && (flags & (SCHEME_SETTING | SCHEME_REFERENCING)) + && genv->module + && !(flags & SCHEME_RESOLVE_MODIDS)) { /* Need to return a variable reference in this case, too. */ return scheme_hash_module_variable(env->genv, genv->module->self_modidx, find_global_id, genv->module->insp,