FWIW, 6.3.1.3 para 3 of the C99 Standard says:

> Otherwise, the new type is signed and the value cannot be represented in it; either the result is implementation-defined or an implementation-defined signal is raised.

So the behavior for signed types is undefined--which fits in with the rest of standard.