index_overflow: almost a re-write
The index_overflow code is really important but also pretty bad.
This implements several changes. First I wanted to print more information
about why a warning was printed. So now the error messages says if we're
printing it because we think the index is untrusted user data. Or if it's
because the code assumes that a for loop hit a break statement instead of
ending because we hit the limit. I also silence some warnings or mark
them as low quality if there is a subtraction involved (Smatch is bad at
parsing subtractions).
The other thing is that we can silence a bunch of warnings if they only
happen on an impossible path. This code is a bit tricky. If we were going
to print a warning, then let's assume() that the index is out of bounds and
see if that implies some other condition is impossible.
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>