@chandlerc @regehr
Because GCC can figured out the range of ext_id based on that `index < 0`:
ext_id_10 : [irange] int32_t [-2097151, 2145386496]
That is based on the fact `index<0`, GCC can figure out the range of the undoing cast:
unsigned int [2147483648, +INF]
And then undoing the subtraction you get:
unsigned int [0, 2145386496][4292870145, +INF]
And then undoing the cast from signed to unsigned you get back:
int32_t [-2097151, 2145386496]