(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
(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
- (when global-p
- (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