future: fix slow path for inlined struct getter
Merge to v6.1
(cherry picked from commit 4541a75e76
)
This commit is contained in:
parent
1ab2f2643e
commit
23ab4a1615
24
pkgs/racket-pkgs/racket-test/tests/future/slow-getter.rkt
Normal file
24
pkgs/racket-pkgs/racket-test/tests/future/slow-getter.rkt
Normal file
|
@ -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)))
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user