verify-type-declarations-switch

As with all compiler switch variables, the value of this variable
can be t, nil, or a
function object that accepts five arguments and returns t or nil. The arguments
passed to the function will be the values of the safety, space, speed,
debug, and compilation-speed 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.

Code compiled with this switch true will have additional runtime type
checking done of any lambda or let bindings of a declared
variable and any setqs to that variable to ensure that the value is of
the correct type. If the variable is bound to an inappropriate value,
a continuable type-error is generated.

The variable must be lexical (currently closed-over and special
variables are excluded).

The declaration must be in effect during the operation where the check
might be performed (this excludes free declarations after the fact,
but does not exclude setq's within the scope of the free
declaration).