X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fir1final.lisp;h=b2c55f085aafcc1f97004c6e7eb5b67ea552ed95;hb=b7d4d90a22c7dff0c41d261fc4f5c3266edd2a6e;hp=7fa816eb6827c32c4c59b9df2ae6a09911983f76;hpb=5ef7f500a505f5711b1c76ff8c15f443d4815367;p=sbcl.git diff --git a/src/compiler/ir1final.lisp b/src/compiler/ir1final.lisp index 7fa816e..b2c55f0 100644 --- a/src/compiler/ir1final.lisp +++ b/src/compiler/ir1final.lisp @@ -42,7 +42,7 @@ (compiler-notify "~@" + ~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 @@ -87,13 +87,7 @@ (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 "~@" - 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 @@ -123,14 +117,19 @@ (cond ((and (cast-p dest) (not (cast-type-check dest)) (immediately-used-p lvar node)) - (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)))) + (let ((dtype (node-derived-type node)) + (atype (node-derived-type dest))) + (when (values-types-equal-or-intersect + dtype atype) + ;; 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. + ;; + ;; This is sorta DERIVE-NODE-TYPE, but does not try + ;; to optimize the node. + (setf (node-derived-type node) + (values-type-intersection dtype atype))))) ((and (cast-p node) (eq (cast-type-check node) :external)) (aver (basic-combination-p dest))