declared-fixnums-remain-fixnums-switch

As with all compiler switch variables, the value of this variable
can be t, nil, or a
function object that accepts four arguments and returns t or nil. The arguments
passed to the function will be the values of the safety, space, speed,
and debug optimization qualities, in that order. nil is equivalent to a function that always returns
nil and t to a
function that always returns t. When the
value is a function and we say t (or true) or
nil (or false) in the text below, we mean
that the function returns, respectively, t or
nil.

If this switch is true, compiler will generate code that assumes the
sum and difference of declared fixnums are fixnums. This switch
affects +
(e.g. (+ x y)) and also + analogs like 1+ and incf, and - (e.g. (- x y)) and
also - analogs
like 1-
and decf. No
assumptions are made about the results of multiplication, division,
shifting, or any operation other than + and - and their analogs.

Initially true only if speed is 3 and safety is 0. Non-compliance
note: having this switch be true is not compliant with ANSI Common
Lisp, which requires that fixnum arithmetic work correctly in all
cases. You may turn this switch off entirely by evaluating:

(setf comp:declared-fixnums-remain-fixnums-switch nil)

Warning: if this switch returns true during
compilation but the sum or difference of two declared fixnums is not a
fixnum, the compiled code will silently produce erroneous results.