Remove a workaround in bit-vector consets
[sbcl.git] / src / compiler / proclaim.lisp
index 6e7fc38..755467a 100644 (file)
               (destructuring-bind (quality raw-value) q-and-v-or-just-q
                 (values quality raw-value)))
         (cond ((not (policy-quality-name-p quality))
-               (let ((deprecation-warning (policy-quality-deprecation-warning quality spec)))
-                 (if deprecation-warning
-                     (compiler-warn deprecation-warning)
-                     (compiler-warn "~@<Ignoring unknown optimization quality ~S in:~_ ~S~:>"
-                                    quality spec))))
+               (or (policy-quality-deprecation-warning quality)
+                   (compiler-warn
+                    "~@<Ignoring unknown optimization quality ~S in:~_ ~S~:>"
+                    quality spec)))
               ((not (typep raw-value 'policy-quality))
                (compiler-warn "~@<Ignoring bad optimization value ~S in:~_ ~S~:>"
                               raw-value spec))
                      (when (type/= ctype old-type)
                        ;; FIXME: changing to FTYPE-PROCLAMATION-MISMATCH
                        ;; broke late-proclaim.lisp.
-                       (style-warn
-                        "~@<new FTYPE proclamation for ~S~@:_  ~S~@:_~
-                       does not match the old FTYPE proclamation:~@:_  ~S~@:>"
-                        name (type-specifier ctype) (type-specifier old-type)))))
-
+                       (if (info :function :info name)
+                           ;; Allow for tightening of known function types
+                           (unless (csubtypep ctype old-type)
+                             (cerror "Continue"
+                                     "~@<new FTYPE proclamation for known function ~S~@:_  ~S~@:_~
+                                      does not match its old FTYPE:~@:_  ~S~@:>"
+                                     name (type-specifier ctype) (type-specifier old-type)))
+                           (#+sb-xc-host warn
+                            #-sb-xc-host style-warn
+                            "~@<new FTYPE proclamation for ~S~@:_  ~S~@:_~
+                             does not match the old FTYPE proclamation:~@:_  ~S~@:>"
+                            name (type-specifier ctype) (type-specifier old-type))))))
                  ;; Now references to this function shouldn't be warned
                  ;; about as undefined, since even if we haven't seen a
                  ;; definition yet, we know one is planned.