diff --git a/src/pcl/std-class.lisp b/src/pcl/std-class.lisp
index 1d4049dcd0dc12be659f4a583da25d3d815d7e68..3f247f2957fa08dc9d310eb218a9fcbe94f82c7b 100644
--- a/src/pcl/std-class.lisp
+++ b/src/pcl/std-class.lisp
@@ -435,7 +435,12 @@
 	       slot-name)
 	    else do
 	      (loop for (option value . more) on slot by #'cddr
-		    if (and (member option '(:allocation :type :initform
+		    if (and (eq option :allocation)
+			    (not (member value '(:class :instance)))) do
+		      (simple-program-error
+		       "~@<Slot ~S: :allocation value must be :class or :instance, not ~S~@:>"
+		       slot-name value)
+		    else if (and (member option '(:type :initform
 					     :documentation))
 			    (not (eq unsupplied
 				     (getf more option unsupplied)))) do