diff --git a/compiler/ir1final.lisp b/compiler/ir1final.lisp index c997a909df201b0ce16644f9789116df9ecbbc20..7ecae5e43931b59adf67adb4ddc77327ece5ee85 100644 --- a/compiler/ir1final.lisp +++ b/compiler/ir1final.lisp @@ -29,20 +29,24 @@ (let ((*compiler-error-context* node)) (dolist (failure failures) (let ((what (cdr failure))) - (if (consp what) - (compiler-note "Unable to optimize because:~%~6T~?" - (first what) (rest what)) - (collect ((messages)) - (flet ((frob (string &rest stuff) - (messages string) - (messages stuff))) - (valid-function-use node what - :warning-function #'frob - :error-function #'frob)) - - (compiler-note "Unable to optimize due to type uncertainty:~@ - ~{~6T~?~^~&~}" - (messages))))))))) + (cond + ((consp what) + (compiler-note "Unable to optimize because:~%~6T~?" + (first what) (rest what))) + ((valid-function-use node what + :argument-test #'types-intersect + :result-test #'values-types-intersect) + (collect ((messages)) + (flet ((frob (string &rest stuff) + (messages string) + (messages stuff))) + (valid-function-use node what + :warning-function #'frob + :error-function #'frob)) + + (compiler-note "Unable to optimize due to type uncertainty:~@ + ~{~6T~?~^~&~}" + (messages)))))))))) ;;; Check-Free-Function -- Interface