diff --git a/pkgs/racket-pkgs/racket-test/tests/racket/contract/contract-out.rkt b/pkgs/racket-pkgs/racket-test/tests/racket/contract/contract-out.rkt index eec9e457c4..148f719d7d 100644 --- a/pkgs/racket-pkgs/racket-test/tests/racket/contract/contract-out.rkt +++ b/pkgs/racket-pkgs/racket-test/tests/racket/contract/contract-out.rkt @@ -914,6 +914,20 @@ (eval 'provide/contract46-x)) 123) + (test/spec-passed/result + 'provide/contract47 + '(begin + (eval '(module provide/contract47-m1 racket + (struct the-name-of-my-struct ()) + (provide (contract-out (struct the-name-of-my-struct ()))))) + (eval '(module provide/contract47-m2 racket + (require 'provide/contract47-m1) + (define provide/contract47-x (object-name the-name-of-my-struct)) + (provide provide/contract47-x))) + (eval '(require 'provide/contract47-m2)) + (eval 'provide/contract47-x)) + 'the-name-of-my-struct) + (contract-error-test 'contract-error-test8 #'(begin diff --git a/racket/collects/racket/contract/private/provide.rkt b/racket/collects/racket/contract/private/provide.rkt index df1dab4ece..11ec0e1414 100644 --- a/racket/collects/racket/contract/private/provide.rkt +++ b/racket/collects/racket/contract/private/provide.rkt @@ -606,11 +606,14 @@ selector-codes ... mutator-codes ... predicate-code - (define (#,chaperone-constructor-id constructor-args ...) - (chaperone-struct (#,constructor-id constructor-args ...) - struct-info - (λ (struct-type skipped?) - (values -struct:struct-name skipped?)))) + (define #,chaperone-constructor-id + (let ([struct-name + (λ (constructor-args ...) + (chaperone-struct (#,constructor-id constructor-args ...) + struct-info + (λ (struct-type skipped?) + (values -struct:struct-name skipped?))))]) + struct-name)) constructor-code ;; expanding out the body of the `make-pc-struct-type' function