>
>
>
V1051. It is possible that an assigned …


V1051. It is possible that an assigned variable should be checked in the next condition. Consider checking for typos.

The analyzer has detected a situation where a variable is initialized or assigned a new value and is expected to be checked in the condition of a subsequent 'if' statement but another variable is checked instead.

This error is demonstrated by the following example:

int ret = syscall(....);
if (ret != -1) { .... }
....
int ret2 = syscall(....);
if (ret != -1) { .... }    // <=

Programmers often need to check the value returned by a function but use a wrong variable name in the condition of the 'if' statement. This mistake is typically made when you clone a code fragment but forget to modify the name of the variable in the condition. In the example above, the programmer forgot to change the name 'ret' to 'ret2'.

Fixed version:

int ret2 = syscall(....);
if (ret2 != -1) { .... }

The following example also demonstrates this mistake:

obj->field = ....;
if (field) ....;

Both the variable and the class member have the same name, which makes it easy to confuse one with the other.

This diagnostic is heuristic; it splits the names of variables into individual strings and compares the respective parts to conclude if there is a typo. It also performs a basic type check, aiming at reducing the number of false positives.

The diagnostic may often be triggered by code like this:

var->m_abc = ....;
var->m_cba = ....;
if (var->m_abc)      // <=
{
  ....
}

Fragments like this are usually correct. You can either suppress such warnings or swap the assignments so that the variable to be checked is assigned a value immediately before the 'if' statement:

var->m_cba = ....;
var->m_abc = ....;
if (var->m_abc)
{
  ....
}

Keeping the assignment and the check close to each other also makes the code more readable.

This diagnostic is classified as:

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