﻿# V765\. Compound assignment expression 'X \+\= X \+ N' is suspicious\. Consider inspecting it for a possible error\.

The analyzer detected a potential error in an arithmetic or logical expression: a variable is used both in the left and the right parts of a compound\-assignment expression\.

Consider the following example: 

```cpp
void Foo(int x, int y, int z)
{
  x += x + y;
  ....
}
```

This code is likely to contain a typo and was probably meant to look like this:

```cpp
void Foo(int x, int y, int z)
{
  x = x + y;
  ....
}
```

Or like this:

```cpp
void Foo(int x, int y, int z)
{
  x += z + y;
  ....
}
```

It is true that programmers use expressions like these as a tricky means to multiply a number by two, but such code is strange and needs to be checked\. Such expressions look rather complicated and probably should be rewritten in a simpler and clearer way:

```cpp
void Foo(int x, int y, int z)
{
  x = x * 2 + y;
  ....
}
```

There are also more suspicious expressions that need to be inspected:

```cpp
void Foo(int x, int y)
{
  x -= x + y;
}
```

This expression can be simplified in the following way:

* x \-\= x \+ y;
* x \= x \- \(x \+ y\);
* x \= \-y;

It is not clear if this behavior is intended or caused by a typo\. In any case, this code should be checked\.