0.8.20.27:
[sbcl.git] / src / compiler / ir1final.lisp
index c78d83a..4f79cf8 100644 (file)
@@ -20,7 +20,7 @@
 (defun note-failed-optimization (node failures)
   (declare (type combination node) (list failures))
   (unless (or (node-deleted node)
-             (not (fun-info-p (combination-kind node))))
+             (not (eq :known (combination-kind node))))
     (let ((*compiler-error-context* node))
       (dolist (failure failures)
        (let ((what (cdr failure))
@@ -42,7 +42,7 @@
              (compiler-notify "~@<unable to ~
                                 ~2I~_~A ~
                                 ~I~_due to type uncertainty: ~
-                               ~2I~_~{~?~^~@:_~}~:>"
+                                ~2I~_~{~?~^~@:_~}~:>"
                             note (messages))))
           ;; As best I can guess, it's OK to fall off the end here
           ;; because if it's not a VALID-FUNCTION-USE, the user
                   (type-specifier declared-ftype)
                   (type-specifier defined-ftype)))))
            (:defined
-            (setf (info :function :type source-name) defined-ftype)))
-         (when (fasl-output-p *compile-object*)
-           (if (member source-name *fun-names-in-this-file* :test #'equal)
-               (compiler-warn "~@<Duplicate definition for ~S found in ~
-                                one static unit (usually a file).~@:>"
-                              source-name)
-               (push source-name *fun-names-in-this-file*)))))))
+            (setf (info :function :type source-name) defined-ftype)))))))
   (values))
 
 ;;; Find all calls in COMPONENT to assumed functions and update the
         (cond ((and (cast-p dest)
                     (not (cast-type-check dest))
                     (immediately-used-p lvar node))
-               (derive-node-type node (cast-asserted-type dest)))
+               (when (values-types-equal-or-intersect
+                      (node-derived-type node)
+                      (cast-asserted-type dest))
+                 ;; FIXME: We do not perform pathwise CAST->type-error
+                 ;; conversion, and type errors can later cause
+                 ;; backend failures. On the other hand, this version
+                 ;; produces less efficient code.
+                 (derive-node-type node (cast-asserted-type dest))))
               ((and (cast-p node)
                     (eq (cast-type-check node) :external))
                (aver (basic-combination-p dest))