diff --git a/pkgs/racket-pkgs/racket-test/tests/future/slow-getter.rkt b/pkgs/racket-pkgs/racket-test/tests/future/slow-getter.rkt new file mode 100644 index 0000000000..1ee5661f82 --- /dev/null +++ b/pkgs/racket-pkgs/racket-test/tests/future/slow-getter.rkt @@ -0,0 +1,24 @@ +#lang racket/base +(require racket/future) + +(let () + (struct a (x)) + (define an-a (a 10)) + + (define iter 10000) + + (define (f x) + (set! iter (sub1 iter)) + (unless (zero? iter) + ;; This call to `x` is JITted optimistically + ;; as a struct-getter call, so non-getter `x` + ;; fill fall back to a slow path: + (x an-a))) + (set! f f) + + (void (f a-x)) + + (define f1 (future (lambda () + (f f)))) + (for/fold ([x #f]) ([i (in-range 1000)]) + (cons 1 2))) diff --git a/racket/src/racket/src/jitcall.c b/racket/src/racket/src/jitcall.c index 141cc3c5e7..3a00edddb5 100644 --- a/racket/src/racket/src/jitcall.c +++ b/racket/src/racket/src/jitcall.c @@ -557,7 +557,7 @@ int scheme_generate_finish_apply(mz_jit_state *jitter) int scheme_generate_finish_tail_apply(mz_jit_state *jitter) { GC_CAN_IGNORE jit_insn *refr USED_ONLY_FOR_FUTURES; - (void)mz_finish_lwe(_scheme_tail_apply_from_native, refr); + (void)mz_finish_lwe(ts__scheme_tail_apply_from_native, refr); return 1; }