According to some folks on USENET, it’s not just InterlockedOr() that’s broken (see my earlier post for background).
Someone asked if the problem was limited to InterlockedOr():
On 2006-07-29 00:16:04 -0500, 440gtx@email.com said:
Skywing [MVP] wrote:
> InterlockedAnd as well from following ntdev.It appears InterlockedXor generates incorrect code as well. Perhaps the bug can appear anytime the compiler emits a cmpxchg instruction.
At this point I wouldn’t mind seeing something from Microsoft along the lines of an official erratum describing what really is broken, as opposed to having people make guesses.
Please see my post at http://blogs.msdn.com/mlacey/archive/2006/08/01/686098.aspx, which explains what the code generation issue is, and hopefully clarifies where (to the best of my knowledge) this can happen when using VC++ 7.1.
Thanks.