math: ignore fuzzy maxes that are type_min() + 1
authorDan Carpenter <dan.carpenter@oracle.com>
Mon, 26 Nov 2012 08:22:11 +0000 (26 11:22 +0300)
committerDan Carpenter <dan.carpenter@oracle.com>
Mon, 26 Nov 2012 08:22:11 +0000 (26 11:22 +0300)
If you have a loop where:
if (x > var) { ...

If "var" is unknown then we know that on the true side x is at least 1
higher than the absolute minimum.  But it doesn't mean we should count
that as a fuzzy max.

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
smatch_math.c

index fe76e96..a29069e 100644 (file)
@@ -497,6 +497,8 @@ static int get_fuzzy_max_helper(struct expression *expr, sval_t *max)
 
        if (sval_is_min(sval))
                return 0;
+       if (sval.value == sval_type_min(sval.type).value + 1)  /* it's common to be on off */
+               return 0;
 
        *max = sval_cast(get_type(expr), sval);
        return 1;