diff --git a/compiler/ltn.lisp b/compiler/ltn.lisp index afd86ba143468496f49a8314d9431b02eeb3ea0a..1ef29fa9a700ab783e3440233e7c6d80d0b7add6 100644 --- a/compiler/ltn.lisp +++ b/compiler/ltn.lisp @@ -644,17 +644,18 @@ (let* ((cont (node-cont call)) (atype (continuation-asserted-type cont)) (dtype (node-derived-type call))) - (when (or (and (eq (template-result-types template) :conditional) - (let ((dest (continuation-dest cont))) - (and (if-p dest) - (immediately-used-p (if-test dest) call)))) - (template-results-ok template dtype) - (and (not (and (eq (template-policy template) :fast-safe) - safe-p)) - (continuation-type-check cont) - (template-results-ok template - (values-type-intersection - dtype atype)))) + (when (if (eq (template-result-types template) :conditional) + (let ((dest (continuation-dest cont))) + (and (if-p dest) + (immediately-used-p (if-test dest) call))) + (or (template-results-ok template dtype) + (and (or (not (eq (template-policy template) + :fast-safe)) + (not safe-p)) + (continuation-type-check cont) + (template-results-ok template + (values-type-intersection + dtype atype))))) (return (values template rejected (rest templates)))))) (setq rejected template))))