1. Missing syntax check of FUNCTION special form when compiler-macro exists.

(defun hairy (x) #|... whatever ... |# x)
(defun really-fn (x) x)
(define-compiler-macro hairy (x) `(really-fn ,x))
(defun testme (x)
  (funcall (function hairy frob) x)) ; compiles a call to really-fn with no complaint

This fixes it:

diff --git a/src/compiler/ir1tran.lisp b/src/compiler/ir1tran.lisp
index b05f9c3..dfabe4b 100644
--- a/src/compiler/ir1tran.lisp
+++ b/src/compiler/ir1tran.lisp
@@ -700,7 +700,8 @@
 (defun find-compiler-macro (opname form)
   (if (eq opname 'funcall)
       (let ((fun-form (cadr form)))
-        (cond ((and (consp fun-form) (eq 'function (car fun-form)))
+        (cond ((and (consp fun-form) (eq 'function (car fun-form)) (not (cddr fun-form)))
                (let ((real-fun (cadr fun-form)))
                  (if (legal-fun-name-p real-fun)
                      (values (sb!xc:compiler-macro-function real-fun *lexenv*)

2. If a SETF function is defined first, a later macro definition gets a style warning, but the opposite is not true.  This order warns:
* (defun (setf foocount) (newval something) something newval)
* (defsetf foocount %set-foocount)
This order doesn't:
* (defsetf frobcount %set-frobcount)
* (defun (setf frobcount) (newval something) something newval)

A slightly noisy solution is below. Noisy because you get 2 warnings instead of 1. This is due to separate calls to NOTE-IF-SETF-FUN-AND-MACRO, one from PROCLAIM-AS-FUN-NAME and one from FIND-FREE-FUN each complaining. It would be nice not to do that.

diff --git a/src/compiler/info-functions.lisp b/src/compiler/info-functions.lisp
index ea876b7..47f7b86 100644
--- a/src/compiler/info-functions.lisp
+++ b/src/compiler/info-functions.lisp
@@ -85,9 +85,9 @@
 ;;; can't assume that they aren't just naming a function (SETF FOO)
 ;;; for the heck of it. NAME is already known to be well-formed.
 (defun note-if-setf-fun-and-macro (name)
-  (when (consp name)
-    (when (or (info :setf :inverse name)
-              (info :setf :expander name))
+  (when (and (consp name) (eq (car name) 'setf))
+    (when (or (info :setf :inverse (second name))
+              (info :setf :expander (second name)))
        "defining as a SETF function a name that already has a SETF macro:~
        ~%  ~S"