diff --git a/pkgs/racket-test-core/tests/racket/foreign-test.rktl b/pkgs/racket-test-core/tests/racket/foreign-test.rktl index 0398e0cb83..5f674a94f1 100644 --- a/pkgs/racket-test-core/tests/racket/foreign-test.rktl +++ b/pkgs/racket-test-core/tests/racket/foreign-test.rktl @@ -1021,6 +1021,13 @@ (define-cpointer-type _foo) (test 'foo? object-name foo?) +(define-cpointer-type _also_foo #f #f (lambda (ptr) + (cpointer-push-tag! ptr 'extra) + ptr)) +(let ([p (cast (malloc 16) _pointer _also_foo)]) + (test #t also_foo? p) + (test #t cpointer-has-tag? p 'extra)) + ;; ---------------------------------------- ;; Test JIT inlining diff --git a/racket/collects/ffi/unsafe.rkt b/racket/collects/ffi/unsafe.rkt index 4d8f293bb9..83ec48c1a2 100644 --- a/racket/collects/ffi/unsafe.rkt +++ b/racket/collects/ffi/unsafe.rkt @@ -1356,7 +1356,7 @@ [(_ _TYPE #:tag the-tag) #'(define-cpointer-type _TYPE #f #f #f #:tag the-tag)] [(_ _TYPE ptr-type) #'(define-cpointer-type _TYPE ptr-type #f #f #:tag #f)] [(_ _TYPE ptr-type #:tag the-tag) #'(define-cpointer-type _TYPE ptr-type #f #f #:tag the-tag)] - [(_ _TYPE ptr-type scheme->c c->scheme) #'(define-cpointer-type _TYPE ptr-type #f #f #:tag #f)] + [(_ _TYPE ptr-type scheme->c c->scheme) #'(define-cpointer-type _TYPE ptr-type scheme->c c->scheme #:tag #f)] [(_ _TYPE ptr-type scheme->c c->scheme #:tag the-tag) (and (identifier? #'_TYPE) (regexp-match #rx"^_.+" (symbol->string (syntax-e #'_TYPE))))