diff --git a/src/cmp/cmpeval.lsp b/src/cmp/cmpeval.lsp
index a6a0f8d..3e522ce 100644
--- a/src/cmp/cmpeval.lsp
+++ b/src/cmp/cmpeval.lsp
@@ -68,11 +68,10 @@
 	      (setq fd (cmp-macro-function fname)))
 	 (c1expr (cmp-expand-macro fd (list* fname args))))
 	((and (setq can-inline (declared-inline-p fname))
+	      (<= (length *inlined-functions*) 3)
 	      (consp can-inline)
 	      (eq (first can-inline) 'function)
 	      (<= (cmp-env-optimization 'space) 1))
-	 (when (member fname *inlined-functions* :test #'eq)
-	   (cmperr "Recursive function ~A declared inline." fname))
 	 (let ((*inlined-functions* (cons fname *inlined-functions*)))
 	   (cmpnote "Inlining ~a" fname)
 	   (c1expr `(funcall ,can-inline ,@args))))
@@ -84,9 +83,8 @@
       (when (> (length args) si::c-arguments-limit)
 	(return-from c1call-local (unoptimized-long-call `#',fname args)))
       (let ((lambda (fun-lambda-expression fun)))
-	(when (and lambda (declared-inline-p fname))
-	  (when (member fname *inlined-functions* :test #'eq)
-	    (cmperr "Recursive function ~A declared inline." fname))
+	(when (and lambda (declared-inline-p fname)
+		   (< (length *inlined-functions*) 3))
 	  (return-from c1call-local
 	    (let ((*inlined-functions* (cons fname *inlined-functions*)))
 	      (c1expr `(funcall #',lambda ,@args))))))
