diff --git a/collects/racket/private/define-struct.rkt b/collects/racket/private/define-struct.rkt index 676cd74f1d..8d763759e3 100644 --- a/collects/racket/private/define-struct.rkt +++ b/collects/racket/private/define-struct.rkt @@ -319,7 +319,8 @@ (raise-syntax-error #f "not a name for a generics group" gen:foo gen:foo)) - (unless (identifier? gen:foo) (bad-generics)) + (unless (and (identifier? gen:foo) (identifier-binding gen:foo)) + (bad-generics)) (define gen:foo-val (syntax-local-value gen:foo)) (unless (and (list? gen:foo-val) (>= (length gen:foo-val) 1)) diff --git a/collects/tests/generic/errors.rkt b/collects/tests/generic/errors.rkt new file mode 100644 index 0000000000..062e203492 --- /dev/null +++ b/collects/tests/generic/errors.rkt @@ -0,0 +1,14 @@ +#lang racket/base + +(require racket/generic unstable/macro-testing) + +(module+ test + (require rackunit) + + (check-exn #rx"not a name for a generics group" + (lambda () (convert-compile-time-error + (struct foo () #:methods 3)))) + (check-exn #rx"not a name for a generics group" + (lambda () (convert-compile-time-error + (struct foo () #:methods bad)))) + ) diff --git a/collects/tests/generic/tests.rkt b/collects/tests/generic/tests.rkt index cd58377429..b0d58c37ac 100644 --- a/collects/tests/generic/tests.rkt +++ b/collects/tests/generic/tests.rkt @@ -9,6 +9,7 @@ (submod "equal+hash.rkt" test) (submod "custom-write.rkt" test) (submod "defaults.rkt" test) + (submod "errors.rkt" test) "syntax-errors.rkt" "base-interfaces.rkt" "contract.rkt"