# V617. Argument of the '|' bitwise operation always contains non-zero value. Consider inspecting the condition.

The analyzer has detected use of a non-zero constant in the bitwise operation OR (|). The result of this expression is always a non-zero value. It may cause incorrect logic of program execution when such an expression is used in conditions or loops.

Consider a simplest example:

    enum { FirstValue, SecondValue };
    int Flags = GetFlags();
    if (Flags | SecondValue)
    {...}

The expression in the 'if' operator's condition is always true. Errors related to using non-zero constants in bitwise operations occur because of misprints. For example, it may appear that another bitwise operation, for example &, should be used in such a fragment. This is the correct code:

    enum { FirstValue, SecondValue };
    int Flags = GetFlags();
    if (Flags & SecondValue)
    {...}

Consider a code sample the analyzer has found in one real application:

    #define PSP_HIDEHEADER 0x00000800
    BOOL CResizablePageEx::NeedsRefresh(....)
    {
      if (m_psp.dwFlags | PSP_HIDEHEADER)
       return TRUE;
      ...
      return
        CResizableLayout::NeedsRefresh(layout, rectOld, rectNew);
    }

It's obvious that the 'if' operator will always execute the 'return TRUE;' branch, which is incorrect. This is the fixed code:

    #define PSP_HIDEHEADER 0x00000800
    BOOL CResizablePageEx::NeedsRefresh(....)
    {
      if (m_psp.dwFlags & PSP_HIDEHEADER)
        return TRUE;
      ...
      return
        CResizableLayout::NeedsRefresh(layout, rectOld, rectNew);
    }

This diagnostic is classified as:

CWE-480

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