# V786. Assigning the value C to the X variable looks suspicious. The value range of the variable: [A, B].

The analyzer detected that a variable is assigned a value that is beyond its value range.

Consider a few examples that trigger this warning:

    bool b;
    ....
    b = 100;

Assigning the value 100 to a variable of type bool makes no sense. This may be a typo, and some other variable was probably meant to be used instead of 'b'.

Another example:

    struct S
    {
      int flag : 1;
    }
    ....
    S s;
    s.flag = 1;

The 'flag' bit field can take values from the range [-1, 0], not [0, 1], as it might seem at first. The reason is that this variable is signed. If you need a bit field with the range [0, 1], make it 'unsigned':

    struct S
    {
      unsigned flag : 1;
    }
    ....
    S s;
    s.flag = 1;

This diagnostic is classified as:

CWE-197 CERT-MSC01-C

You can look at examples of errors detected by the V786 diagnostic.