diff --git a/pkgs/racket-doc/scribblings/reference/define-struct.scrbl b/pkgs/racket-doc/scribblings/reference/define-struct.scrbl index 0f5165659f..644cd224d5 100644 --- a/pkgs/racket-doc/scribblings/reference/define-struct.scrbl +++ b/pkgs/racket-doc/scribblings/reference/define-struct.scrbl @@ -180,7 +180,8 @@ If @racket[name-id] is supplied via @racket[#:extra-name] and it is not @racket[id], then both @racket[name-id] and @racket[id] are bound to information about the structure type. Only one of @racket[#:extra-name] and @racket[#:name] can be provided within a -@racket[struct] form. +@racket[struct] form, and @racket[#:extra-name] cannot be combined +with @racket[#:omit-define-syntaxes]. @examples[#:eval posn-eval (struct ghost (color name) #:prefab #:extra-name GHOST) diff --git a/pkgs/racket-test-core/tests/racket/struct.rktl b/pkgs/racket-test-core/tests/racket/struct.rktl index a59500e8b3..31f87d768d 100644 --- a/pkgs/racket-test-core/tests/racket/struct.rktl +++ b/pkgs/racket-test-core/tests/racket/struct.rktl @@ -1193,6 +1193,9 @@ (test 'blinky ghost-name (struct-copy GHOST (ghost 'red 'blinky))) (syntax-test #'GHOST) +(syntax-test #'(struct ghost (color name) #:extra-name GHOST #:omit-define-syntaxes) + "cannot be combined") + ;; ---------------------------------------- ;; Check `#:authentic`: diff --git a/racket/collects/racket/private/define-struct.rkt b/racket/collects/racket/private/define-struct.rkt index 9e13a56977..6262947e52 100644 --- a/racket/collects/racket/private/define-struct.rkt +++ b/racket/collects/racket/private/define-struct.rkt @@ -741,6 +741,8 @@ (lambda () (cond [(and info-name (not name-only?)) + (when omit-define-syntaxes? + (raise-syntax-error #f "#:extra-name cannot be combined with #:omit-define-syntaxes" stx)) ; reuse existing value (list #`(define-syntaxes (#,info-name) (syntax-local-value #'#,id)))] [else null]))])