The error messages are confusing when shift result is undefined because the shift count is negative or exceeds the bit width. I have seen that users often draw the conclusion that Clang thinks some operand is uninitialized and determine that Clang shows a false positive.
I also know that some users use negative shift count by intention and don't think that would cause problems.
This patch clarify the error message and refactors the code a little.