diff --git a/compiler/proclaim.lisp b/compiler/proclaim.lisp
index 564b5394ff8af85570124435fd6cd12c8b44f4f1..58e3a0a68a97d47dcc5ecb1a4ad74a50147da832 100644
--- a/compiler/proclaim.lisp
+++ b/compiler/proclaim.lisp
@@ -200,7 +200,8 @@
     (setf (info type kind name) :structure)
     (setf (info type structure-info name) info)
     (when (info type expander name)
-      (setf (info type expander name) nil)))
+      (setf (info type expander name) nil))
+    (%note-type-defined name))
 
   ;;; ### Should declare arg/result types. 
   (let ((copier (dd-copier info)))
@@ -230,6 +231,20 @@
 
 (setf (symbol-function '%compiler-defstruct) #'%%compiler-defstruct)
 
+
+;;; %NOTE-TYPE-DEFINED  --  Interface
+;;;
+;;;    Note that the type Name has been (re)defined, updating the undefined
+;;; warnings and SPECIFIER-TYPE cache.
+;;; 
+(defun %note-type-defined (name)
+  (declare (symbol name))
+  (when (boundp '*undefined-warnings*)
+    (note-name-defined name :type))
+  (when (boundp '*specifier-type-cache-vector*)
+    (specifier-type-cache-clear))
+  (undefined-value))
+
 
 ;;;; Dummy definitions of COMPILER-ERROR, etc.
 ;;;