diff --git a/collects/tests/racket/optimize.rktl b/collects/tests/racket/optimize.rktl index f15460c513..69d096b529 100644 --- a/collects/tests/racket/optimize.rktl +++ b/collects/tests/racket/optimize.rktl @@ -2573,5 +2573,14 @@ (read (open-input-bytes (get-output-bytes o))))) ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; check error checking of JITted `continuation-mark-set-first' + +(err/rt-test (let ([f #f]) + (set! f (lambda () + (continuation-mark-set-first 5 #f))) + (f))) + +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + (report-errs) diff --git a/src/racket/src/jitinline.c b/src/racket/src/jitinline.c index 70afb2cf5d..b5b57b5fda 100644 --- a/src/racket/src/jitinline.c +++ b/src/racket/src/jitinline.c @@ -56,6 +56,15 @@ static Scheme_Object *extract_one_cc_mark_to_tag(Scheme_Object *mark_set, { /* wrapper on scheme_extract_one_cc_mark_to_tag() to convert NULL to false */ Scheme_Object *r; + + if (mark_set && !SAME_TYPE(SCHEME_TYPE(mark_set), scheme_cont_mark_set_type)) { + Scheme_Object *a[2]; + a[0] = mark_set; + a[1] = key; + scheme_wrong_contract("continuation-mark-set-first", "(or/c continuation-mark-set? #f)", 0, 2, a); + return NULL; + } + r = scheme_extract_one_cc_mark_to_tag(mark_set, key, prompt_tag); if (!r) return scheme_false; return r;