Common Lisp the Language
2nd Edition

Some types of conditions are predefined by the system. All types of conditions
are subtypes of condition. That is
(typep x 'condition) is true if
and only if the value of x is a condition.
Implementations supporting multiple (or non-hierarchical) type inheritance are expressly permitted to exploit multiple inheritance in the tree of condition types as implementation-dependent extensions as long as such extensions are compatible with the specifications in this chapter. [X3J13 voted in March 1989 (ZLOS-CONDITIONS) to integrate the Condition System and the Object System so multiple inheritance is always available for condition types.-GLS]
In order to avoid problems in portable code that runs both in systems with
multiple type inheritance and in systems without it
programmers are explicitly
warned that while all correct Common Lisp implementations will ensure that
(typep c 'condition)
is true for all conditions c (and all subtype relationships indicated in this
chapter will also be true)
it should not be assumed that two condition
types specified to be subtypes of the same third type are disjoint.
(In some cases
disjoint subtypes are identified explicitly
but such disjointness is not to be assumed by
default.) For example
it follows from the subtype descriptions contained in
this chapter that in all implementations
(typep c 'control-error) implies (typep c 'error)
but note that
(typep c 'control-error) does not
imply (not (typep c 'cell-error)).