An implementation is free to define and document some C undefined behaviors.
Rationale document for C99 for example says:
Undefined behavior gives the implementor license not to catch certain program errors that are difficult to diagnose. It also identifies areas of possible conforming language extension: the implementor may augment the language by providing a definition of the officially undefined behavior.
For example, gcc defines some undefined behavior regarding the bitwise shift operator:
GCC does not use the latitude given in C99 only to treat certain aspects of signed '<<' as undefined [...]
http://gcc.gnu.org/onlinedocs/gcc/Integers-implementation.html