diff --git a/pkgs/racket-pkgs/racket-test/tests/racket/cross-phase.rkt b/pkgs/racket-pkgs/racket-test/tests/racket/cross-phase.rkt index 8858ceabbe..f10462a71e 100644 --- a/pkgs/racket-pkgs/racket-test/tests/racket/cross-phase.rkt +++ b/pkgs/racket-pkgs/racket-test/tests/racket/cross-phase.rkt @@ -116,5 +116,21 @@ '(module m '#%kernel (#%declare #:cross-phase-persistent)))))) +;; Check that `expand` produces valies syntax +(let () + (define e + (syntax->datum + (parameterize ([current-namespace (make-base-namespace)]) + (expand '(module m '#%kernel + (#%declare #:cross-phase-persistent)))))) + (let loop ([e e]) + (cond + [(syntax? e) (loop (syntax-e e))] + [(pair? e) (loop (car e)) (loop (cdr e))] + [(null? e) (void)] + [(symbol? e) (void)] + [(keyword? e) (void)] + [else (error 'expand-test "unexpected value: ~e" e)]))) + (displayln "All tests passed.") diff --git a/racket/src/racket/src/module.c b/racket/src/racket/src/module.c index d76bd0108b..b9c3bf61f0 100644 --- a/racket/src/racket/src/module.c +++ b/racket/src/racket/src/module.c @@ -9312,9 +9312,7 @@ static Scheme_Object *do_module_begin_at_phase(Scheme_Object *form, Scheme_Comp_ SCHEME_EXPAND_OBSERVE_NEXT(observer); if (kind == SAVED_MODFORM_KIND) { - expanded_l = scheme_make_pair(SCHEME_CDR(e), expanded_l); - SCHEME_CAR(p) = SCHEME_CAR(e); - prev_p = p; + expanded_l = scheme_make_pair(e, expanded_l); p = SCHEME_CDR(p); } else if ((kind == PROVIDE_MODFORM_KIND) || (kind == MODULE_MODFORM_KIND)) {