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: