Index: /trunk/source/compiler/nx-basic.lisp
===================================================================
--- /trunk/source/compiler/nx-basic.lisp	(revision 14368)
+++ /trunk/source/compiler/nx-basic.lisp	(revision 14369)
@@ -641,5 +641,5 @@
     (:undefined-function . "Undefined function ~S") ;; (deferred)
     (:undefined-type . "Undefined type ~S")         ;; (deferred)
-    (:unknown-type-in-declaration . "Unknown or invalid type ~S, declaration ignored")
+    (:unknown-type-in-declaration . "Unknown type ~S, declaration ignored")
     (:bad-declaration . "Unknown or invalid declaration ~S")
     (:invalid-type . report-invalid-type-compiler-warning)
Index: /trunk/source/compiler/nx.lisp
===================================================================
--- /trunk/source/compiler/nx.lisp	(revision 14368)
+++ /trunk/source/compiler/nx.lisp	(revision 14369)
@@ -221,4 +221,5 @@
     (:environment-mismatch . invalid-arguments)
     (:ftype-mismatch . invalid-arguments)
+    (:unknown-type-in-declaration . style-warning)
     (:ignore . style-warning)
     (:result-ignored . style-warning)
Index: /trunk/source/compiler/nx0.lisp
===================================================================
--- /trunk/source/compiler/nx0.lisp	(revision 14368)
+++ /trunk/source/compiler/nx0.lisp	(revision 14369)
@@ -717,5 +717,5 @@
     (parse-unknown-type (c) 
       (when (and whine *compiler-warn-on-undefined-type-references*)
-	(nx1-whine :undefined-type typespec))
+	(nx1-whine (if (keywordp whine) whine :undefined-type) typespec))
       (values nil (parse-unknown-type-specifier c)))
     ;; catch any errors due to destructuring in type-expand
@@ -864,13 +864,12 @@
 (defnxdecl ftype (pending decl env &aux whined)
   (destructuring-bind (type &rest fnames) (%cdr decl)
-    (let ((ctype (specifier-type-if-known type env)))
-      (if (null ctype)
-	(nx1-whine :unknown-type-in-declaration type)
-	(if (types-disjoint-p ctype (specifier-type 'function))
-	  (nx-bad-decls decl)
-	  (dolist (s fnames)
-	    (if (or (symbolp s) (setf-function-name-p s))
-	      (nx-new-fdecl pending s 'ftype type)
-	      (unless (shiftf whined t) (nx-bad-decls decl)))))))))
+    (let ((ctype (specifier-type-if-known type env :whine :unknown-type-in-declaration)))
+      (when ctype
+        (if (types-disjoint-p ctype (specifier-type 'function))
+          (nx-bad-decls decl)
+          (dolist (s fnames)
+            (if (or (symbolp s) (setf-function-name-p s))
+              (nx-new-fdecl pending s 'ftype type)
+              (unless (shiftf whined t) (nx-bad-decls decl)))))))))
 
 (defnxdecl settable (pending decl env)
@@ -894,10 +893,9 @@
 
 (defun nx-process-type-decl (pending decl type vars env &aux whined)
-  (if (specifier-type-if-known type env)
+  (when (specifier-type-if-known type env :whine :unknown-type-in-declaration)
     (dolist (sym vars)
       (if (symbolp sym)
 	(nx-new-vdecl pending sym 'type type)
-	(unless (shiftf whined t) (nx-bad-decls decl))))
-    (nx1-whine :unknown-type-in-declaration type)))
+	(unless (shiftf whined t) (nx-bad-decls decl))))))
 
 (defnxdecl global-function-name (pending decl env)
