diff --git a/pkgs/racket-pkgs/racket-test/tests/racket/chaperone.rktl b/pkgs/racket-pkgs/racket-test/tests/racket/chaperone.rktl index 8eb17cd9c1..9252a64fa2 100644 --- a/pkgs/racket-pkgs/racket-test/tests/racket/chaperone.rktl +++ b/pkgs/racket-pkgs/racket-test/tests/racket/chaperone.rktl @@ -1508,4 +1508,10 @@ ;; ---------------------------------------- +(let () + (struct s ([a #:mutable])) + (err/rt-test (impersonate-struct 5 set-s-a! (lambda (a b) b)))) + +;; ---------------------------------------- + (report-errs) diff --git a/racket/src/racket/src/struct.c b/racket/src/racket/src/struct.c index 642c2cb06d..01f6b61328 100644 --- a/racket/src/racket/src/struct.c +++ b/racket/src/racket/src/struct.c @@ -5458,7 +5458,10 @@ static Scheme_Object *do_chaperone_struct(const char *name, int is_impersonator, if (SCHEME_CHAPERONEP(proc)) proc = SCHEME_CHAPERONE_VAL(proc); if (SCHEME_TRUEP(struct_setter_p(1, a))) { kind = "mutator"; - offset = stype->num_slots; + if (stype) + offset = stype->num_slots; + else + offset = 0; } else if (SCHEME_TRUEP(struct_getter_p(1, a))) { kind = "accessor"; offset = 0;