[PATCH] D13126: New static analyzer checker for loss of sign/precision

Artem Dergachev via cfe-commits cfe-commits at lists.llvm.org
Wed Nov 25 10:02:04 PST 2015


NoQ added a subscriber: NoQ.
NoQ added a comment.

In http://reviews.llvm.org/D13126#291763, @danielmarjamaki wrote:

> I have problems with the "default" handling of expressions.
>
> I want to warn about loss of precision for such code:
>
>   unsigned int x = 256;
>   unsigned char c;
>   c = x;
>   
>
> The analyser tells me that the RHS value is 0 instead of 256 in the assignment "c = x". Here is the dump of the ProgramState:
>
> Store (direct and default bindings), 0x0 :
>
> Expressions:
>  (0x7b9bd30,0x7b458d8) c : &c
>  (0x7b9bd30,0x7b45940) x : 0 U8b
>  Ranges are empty.


Hmm. I guess you need to sign up for the cast expression rather than for the binary operator expression. By the time you reach the assignment operator, the value before the cast is already removed from the environment.


http://reviews.llvm.org/D13126





More information about the cfe-commits mailing list