[PATCH] D10634: Loss of Sign Checker

Soumitra Chatterjee soumitra at yahoo.com
Tue Jul 7 20:03:43 PDT 2015


In http://reviews.llvm.org/D10634#199554, @danielmarjamaki wrote:

> Here is a bigger log with more warnings.
>  https://drive.google.com/file/d/0BykPmWrCOxt2aGtRNTY4eXQ1OU0/view
>
> there are some cases where I don't think there should be a warning.. for instance some compound assignments:
>
> args.c:990:9: warning: assigning negative value to unsigned variable loses sign and may cause undesired runtime behavior [clang-analyzer-alpha.core.LossOfSignAssign]
>
>   tmp /= 10;
>       ^
>
> read.c:4940:13: warning: assigning negative value to unsigned variable loses sign and may cause undesired runtime behavior [clang-analyzer-alpha.core.LossOfSignAssign]
>
>   value >>= 7;
>         ^
>   
>
> I am not an expert but it seems strange to me that clang seems to think that 10 and 7 are negative. Can you investigate this?


Here's a short test case that shows the problem:

  1  void safe_mul(unsigned long x) {
  2    unsigned long multiplier = 1000000000000000000; 
  3    while (x > 0) {
  4      multiplier /= 10;
  5    }
  6  }

I may be wrong here, but I believe that the warning is due to an overflow during constant folding of the initializer, which causes the RHS to be treated as negative.


http://reviews.llvm.org/D10634







More information about the cfe-commits mailing list