# V3107. Identical expression to the left and to the right of compound assignment.

The analyzer detected identical subexpressions to the left and to the right of a compound assignment operator. This operation may be incorrect or meaningless, or can be simplified.

Consider the following example:

    x += x + 5;

Perhaps the programmer simply wanted to add the value 5 to the 'x' variable. In that case, the fixed code would look like this:

    x = x + 5;

Or perhaps they wanted to add the value 5 but wrote an extra 'x' variable by mistake. Then the code should look like this:

    x += 5;

However, it is also possible that the code is written correctly, but it looks too complicated and should be simplified:

    x = x * 2 + 5;

Now consider the following example:

    x += x;

This operation is equivalent to multiplying the value of a variable by two. This is what a clearer version would look like:

    x *= 2;

Here is one more expression:

    y += top - y;

We are trying to add the difference of the variables 'top' and 'y' to the 'y' variable. Resolving this expression produces the following result:

    y = y + top – y;

It can be simplified, as the 'y' variable is subtracted from itself, which does not make sense:

    y = top;

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