* promote the compared types properly to address the signed/unsigned
comparison warnings. this also fixes the potential problems of
slicing a compared type down to a "smaller" type before the
comparison.
* check for the width of resulting type and shift bits caused by SI
prefix to avoid the -Wshift-count-overflow warnings. this again
is a potential issue, as shifting n bits of an integer of m bits
width, where n >= m, leads to undefined behaviour.
* add a test for the 2nd fixed issue.