diff --git a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/optimizer/hidden-costs.rkt b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/optimizer/hidden-costs.rkt index 1b940b4c51..5f88e395ca 100644 --- a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/optimizer/hidden-costs.rkt +++ b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/optimizer/hidden-costs.rkt @@ -29,6 +29,8 @@ ;; Log calls to struct constructors, so that OC can report those used in ;; hot loops. (pattern (#%plain-app op:id args:opt-expr ...) - #:when (struct-constructor? #'op) + #:when (let ([constructor-for (syntax-property #'op 'constructor-for)]) + (or (and constructor-for (struct-constructor? constructor-for)) + (struct-constructor? #'op))) #:do [(log-optimization-info "struct constructor" #'op)] #:with opt #'(op args.opt ...))) diff --git a/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/optimizer/missed-optimizations/struct-constructor.rkt b/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/optimizer/missed-optimizations/struct-constructor.rkt new file mode 100644 index 0000000000..9945db3fe9 --- /dev/null +++ b/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/optimizer/missed-optimizations/struct-constructor.rkt @@ -0,0 +1,15 @@ +#;#; +#<