sval: introduce "hard max"
The problem is that say we have:
unsigned char a;
int b;
...
if (!a)
return;
b = a;
At the end it is implied that b is 1-255. But then if use b as an offset
into an array we get all kinds of false positive warnings if the array has
fewer than 256 elements.
The way to fix this is to record whether the maximum value is a hard max
or soft max. The array overflow checks actually care about fuzzy max, and
I have changed fuzzy max to check for a hard max first before checking
for a fuzzy max.
Really, I think the smatch_absolute work was supposed to fix this problem
and it didn't. I should just remove it. I will try do that in a later
patch.
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>