From 4541a75e768ef5c62c7a04ea86c4e8d91b925fb7 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Thu, 17 Jul 2014 14:34:17 +0100 Subject: [PATCH] future: fix slow path for inlined struct getter Merge to v6.1 --- .../racket-test/tests/future/slow-getter.rkt | 24 +++++++++++++++++++ racket/src/racket/src/jitcall.c | 2 +- 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 pkgs/racket-pkgs/racket-test/tests/future/slow-getter.rkt 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; }