There is some code [1] I tried to compile here and I get a strange behavior. I could isolate the problem, so, here is a short version.

The file test.lisp has the following contents:

(defstruct (freq (:predicate freqp))
(c #\x :type base-char)
(p 0.0d0 :type double-float))

(defun select-random (freqs len)
(declare (fixnum len) (simple-vector freqs))
(let ((r (random 1.0d0))
(first (aref freqs 0)))
(declare (double-float r))
(if (< r (freq-p first))
(freq-c first)
(do* ((lo 0)
(hi (1- len))
(mid (floor (+ lo hi) 2) (floor (+ lo hi) 2))
(freq (aref freqs mid) (aref freqs mid)))
((>= lo mid) (freq-c (aref freqs hi)))
(declare (fixnum lo hi mid))
(if (< r (freq-p freq))
(setf hi mid)
(setf lo mid))))))


Now, adding the declarations

(proclaim '(optimize (speed 3) (safety 0) (debug 0) (space 0) (compilation-speed 0)))

and compiling the file gives lots of strange compiler notes for the second call of the function floor.
However, if you omit the (space 0) declaration, no compiler note is given at all. Even changing that line into

(mid (the fixnum (floor (the fixnum (+ lo hi)) 2))
(the fixnum (floor (the fixnum (+ lo hi)) 2)))

does not help. However, if you omit the (space 0) declaration (with both versions of the file), no compiler note is given.

Some tests with this benchmark code [1] show that this strange behavior make the code in [1] runs slower when the (space 0) declaration is given (the difference is HUGE, the code actually takes the double of the time to run!).

[1] http://shootout.alioth.debian.org/u32q/benchmark.php?test=fasta&lang=sbcl&id=2

Gustavo.