Index: /trunk/ccl/compiler/nx-basic.lisp
===================================================================
--- /trunk/ccl/compiler/nx-basic.lisp	(revision 292)
+++ /trunk/ccl/compiler/nx-basic.lisp	(revision 293)
@@ -294,5 +294,5 @@
             (when (non-nil-symbol-p spec)
               (if (assq spec symbol-macros)
-                (error "Special declaration cannot be applied to symbol-macro ~S" spec))
+                (signal-program-error "Special declaration cannot be applied to symbol-macro ~S" spec))
               (push (list* spec 'special t) vdecls)))))
       (dolist (decl decls)
@@ -364,8 +364,14 @@
   (check-environment-args variable symbol-macro function macro)
   (let* ((vars (mapcar #'cons-var variable))
-         (symbol-macros (mapcar #'(lambda (s) (let ((v (cons-var (car s)))) 
-                                                (setf (var-expansion v) (cons :symbol-macro (cadr s)))
-                                                v))
-                                symbol-macro))
+         (symbol-macros (mapcar #'(lambda (s)
+				    (let* ((sym (car s)))
+				      (unless (and (symbolp sym)
+						   (not (constantp sym env))
+						   (not (eq (variable-information sym env) :special)))
+					(signal-program-error "~S can't by bound as a SYMBOL-MACRO" sym))
+				      (let ((v (cons-var (car s)))) 
+					(setf (var-expansion v) (cons :symbol-macro (cadr s)))
+					v)))
+				symbol-macro))
          (macros (mapcar #'(lambda (m) (list* (car m) 'macro (cadr m))) macro))
          (functions (mapcar #'(lambda (f) (list* f 'function nil)) function))
