# V3176. The '&=' or '|=' operator is redundant because the right operand is always true/false.

The analyzer has detected a code fragment where the right operand of the '&=' or '|=' operator always has the same value.

Example:

    void Foo(bool status)
    {
      ....
      bool currentStatus = ....;
      ....
      if(status)
        currentStatus &= status;
      ....
    }

In 'then' block of the 'if' construct, a compound assignment operation is performed. The 'currentStatus' variable will take a value equal to the result of the 'currentStatus & status' logical operation. Based on the condition, 'status' will always be 'true', which makes it pointless to use the '&=' operator — the value of 'currentStatus' will not change after the assignment.

If the right-hand operand is always 'false', the use of the '&=' operator is also pointless. In such cases, it can be replaced with a regular assignment.

The use of the '|=' operator is also pointless if its right operand always has the same value:

- if the value is 'false', the values of the operands remain unchanged;
- if the value is always 'true', then it will be assigned to the left operand regardless of its original value.

The cases described above may indicate both redundant use of '&=' and '|=' operators and an error in the application's logic.

Fixed version of the method described above may look as follows:

    void Foo(bool status)
    {
      ....
      bool currentStatus = ....;
      ....
      if(status)
        currentStatus = status;
      ....
    }

This diagnostic is classified as:

CWE-570 CWE-571