Issue 146205
Summary [rpmalloc] Fake atomic operations in case of MSVC
Labels
Assignees
Reporter slydiman
    In case of MSVC dummy functions are used for atomic operations. 
This can cause side effects and difficult to debug issues.
```
/// Atomic access abstraction (since MSVC does not do C11 yet)

#if defined(_MSC_VER) && !defined(__clang__)

typedef volatile long atomic32_t;

static FORCEINLINE int32_t atomic_load32(atomic32_t *src) { return *src; }

static FORCEINLINE void atomic_store32(atomic32_t *dst, int32_t val) {
  *dst = val;
}
```
Is there any reason do not use intrinsics somethink like the following?
```
#include <intrin.h>

static FORCEINLINE int32_t atomic_load32(atomic32_t *src) { 
  return _InterlockedOr(src, 0); 
}

static FORCEINLINE void atomic_store32(atomic32_t *dst, int32_t val) {
  _InterlockedExchange(dst, val);
}
```


_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to