future: fix slow path for inlined struct getter

Merge to v6.1
(cherry picked from commit 4541a75e76)
This commit is contained in:
Matthew Flatt 2014-07-17 14:34:17 +01:00 committed by Ryan Culpepper
parent 1ab2f2643e
commit 23ab4a1615
2 changed files with 25 additions and 1 deletions

View 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)))

View File

@ -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;
}