Earlier quoted context omitted.
However, the oposite shift is undefined if a 1 goes into the sign bit. More precisely, regarding E1 "If E1 has a signed type and nonnegative value, and E1 × 2ᴱ² is representable in the result type, then that is the resulting value; otherwise, the behavior is undefined." Thus if E1 is negative, or if the result overflows, UB.
Didn't they specify two's complement signed integers somewhat recently? What's the rationale for leaving these behaviours undefined?
There are also CPUs that do "saturating arithmetic" where overflow results in INT_MAX instead of wrapping.