0.8.3.62:
[sbcl.git] / src / compiler / ir1final.lisp
index 8802d7e..d2888c5 100644 (file)
@@ -27,8 +27,8 @@
              (note (transform-note (car failure))))
          (cond
           ((consp what)
-           (compiler-note "~@<unable to ~2I~_~A ~I~_because: ~2I~_~?~:>"
-                          note (first what) (rest what)))
+           (compiler-notify "~@<unable to ~2I~_~A ~I~_because: ~2I~_~?~:>"
+                            note (first what) (rest what)))
           ((valid-fun-use node what
                           :argument-test #'types-equal-or-intersect
                           :result-test #'values-types-equal-or-intersect)
                (valid-fun-use node what
                               :unwinnage-fun #'give-grief
                               :lossage-fun #'give-grief))
-             (compiler-note "~@<unable to ~
-                              ~2I~_~A ~
-                              ~I~_due to type uncertainty: ~
-                             ~2I~_~{~?~^~@:_~}~:>"
+             (compiler-notify "~@<unable to ~
+                                ~2I~_~A ~
+                                ~I~_due to type uncertainty: ~
+                               ~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
@@ -59,7 +59,8 @@
   (let* ((leaf (functional-entry-fun fun))
         (defined-ftype (definition-type leaf)))
     (setf (leaf-type leaf) defined-ftype)
-    (when (leaf-has-source-name-p leaf)
+    (when (and (leaf-has-source-name-p leaf)
+              (eq (leaf-source-name leaf) (functional-debug-name leaf)))
       (let ((source-name (leaf-source-name leaf)))
        (let* ((where (info :function :where-from source-name))
               (*compiler-error-context* (lambda-bind (main-entry leaf)))
                   (type-specifier declared-ftype)
                   (type-specifier defined-ftype)))))
            (:defined
-            (setf (info :function :type source-name) defined-ftype)))))))
+            (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*)))))))
   (values))
 
 ;;; Find all calls in COMPONENT to assumed functions and update the
             (eq (info :function :kind name) :function))
     (let ((atype (info :function :assumed-type name)))
       (dolist (ref (leaf-refs var))
-       (let ((dest (continuation-dest (node-cont ref))))
+       (let ((dest (node-dest ref)))
          (when (and (eq (node-component ref) component)
                     (combination-p dest)
-                    (eq (continuation-use (basic-combination-fun dest)) ref))
+                    (eq (lvar-uses (basic-combination-fun dest)) ref))
            (setq atype (note-fun-use dest atype)))))
       (setf (info :function :assumed-type name) atype))))