Handle gcc intentional overflow due to unsigned-to-signed casts

Match these expressions:
 * cast to signed type with the same size
 * there is an unary or binary assign (where one of the ops is a constant)
 * definition stmt of the assign rhs is cast to an unsigned type
new version