0.pre8.5:
[sbcl.git] / src / compiler / checkgen.lisp
index 5b44d18..129c754 100644 (file)
 \f
 ;;;; checking strategy determination
 
-(define-optimization-quality type-check
-    (cond ((= safety 0) 0)
-          ;; FIXME: It is duplicated in PROBABLE-TYPE-CHECK-P and in
-          ;; some other places.
-
-          ((and (<= speed safety)
-                (<= space safety)
-                (<= compilation-speed safety))
-           3)
-          (t 2))
-  ("no" "maybe" "fast" "full"))
-
 ;;; Return the type we should test for when we really want to check
 ;;; for TYPE. If type checking policy is "fast", then we return a
 ;;; weaker type if it is easier to check. First we try the defined
     (not (or (values-subtypep (continuation-proven-type cont)
                               (continuation-type-to-check cont))
              (and (combination-p dest)
-                  (eq (combination-kind dest) :full)
+                  (let ((kind (combination-kind dest)))
+                    (or (eq kind :full)
+                        (and (fun-info-p kind)
+                             (null (fun-info-templates kind))
+                             (not (fun-info-ir2-convert kind)))))
                   ;; The theory is that the type assertion is from a
                   ;; declaration in (or on) the callee, so the callee
                   ;; should be able to do the check. We want to let