*new* real_absolute: give a more accurate absolute value
commit57a73b207be38774053e8cddf64b6fe3d01313c3
authorDan Carpenter <dan.carpenter@oracle.com>
Tue, 17 Nov 2015 08:23:18 +0000 (17 11:23 +0300)
committerDan Carpenter <dan.carpenter@oracle.com>
Tue, 17 Nov 2015 08:23:18 +0000 (17 11:23 +0300)
treeb1c37a56c74f1bf51f573fb77bb43432f1ec1317
parent76a605e7a51f176fa36aa82608054c38f671e993
*new* real_absolute: give a more accurate absolute value

The problem is this:

x = unknown / 2;

With the original code, we didn't save anything when we saw that because
unknown divided by 2 is still unknown.  We only save things in
smatch_extra.c when there is a level of confidence or a some intent or
meaning.  That way we can use get_absolute_rl() and if it is the whole
range we can say "Oh, we don't know anything about this variable, let's
ignore it."  But other times, especially if we are looking at integer
overflows then it's important to know that "x can only possibly go up to
u32max / 4 so it can't overflow."

Smatch extra is used to generate warnings but the real absolute is pretty
much used to eliminate false positives.  In that way it's not as critical
to be 100% accurate, any extra information is an improvement.  So I think
I will not replicate all the smatch_extra.c code for tracking the real
absolute.

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Makefile
smatch_extra.h
smatch_math.c
smatch_real_absolute.c [new file with mode: 0644]