0.pre7.14.flaky4:
[sbcl.git] / src / compiler / knownfun.lisp
index 5a30ffc..84799f1 100644 (file)
                                  :optimizer optimizer))
        (target-env (or *backend-info-environment* *info-environment*)))
     (dolist (name names)
+      (let ((old-function-info (info :function :info name)))
+       (when old-function-info
+         ;; This is handled as an error because it's generally a bad
+         ;; thing to blow away all the old optimization stuff. It's
+         ;; also a potential source of sneaky bugs:
+         ;;    DEFKNOWN FOO
+         ;;    DEFTRANSFORM FOO
+         ;;    DEFKNOWN FOO ; possibly hidden inside some macroexpansion
+         ;;    ; Now the DEFTRANSFORM doesn't exist in the target Lisp.
+         ;; However, it's continuable because it might be useful to do
+         ;; it when testing new optimization stuff interactively.
+         (cerror "Go ahead, overwrite it."
+                 "~@<overwriting old FUNCTION-INFO ~2I~_~S ~I~_for ~S~:>"
+                 old-function-info name)))
       (setf (info :function :type name target-env) ctype)
       (setf (info :function :where-from name target-env) :declared)
       (setf (info :function :kind name target-env) :function)
   names)
 
 ;;; Return the FUNCTION-INFO for NAME or die trying. Since this is
-;;; used by people who want to modify the info, and the info may be
+;;; used by callers who want to modify the info, and the info may be
 ;;; shared, we copy it. We don't have to copy the lists, since each
 ;;; function that has generators or transforms has already been
 ;;; through here.