summaryrefslogtreecommitdiff
path: root/lib/System
diff options
context:
space:
mode:
authorOscar Fuentes <ofv@wanadoo.es>2009-12-07 05:29:59 +0000
committerOscar Fuentes <ofv@wanadoo.es>2009-12-07 05:29:59 +0000
commitbcc2e45840941752ae54cf91c0abb013fbc19178 (patch)
tree73c65c1ebedcf50a6e978cf77178e8bfd452457c /lib/System
parent7e572eb37f1ddb4c9c165354f48692d4cd66affa (diff)
downloadllvm-bcc2e45840941752ae54cf91c0abb013fbc19178.tar.gz
llvm-bcc2e45840941752ae54cf91c0abb013fbc19178.tar.bz2
llvm-bcc2e45840941752ae54cf91c0abb013fbc19178.tar.xz
Fixes the Atomic implementation if compiled by MSVC compiler.
sys::cas_flag should be long on this platform, InterlockedAdd() is defined only for the Itanium architecture (according to MSDN). Patch by Michael Beck! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90748 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/System')
-rw-r--r--lib/System/Atomic.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/lib/System/Atomic.cpp b/lib/System/Atomic.cpp
index f9b55a186d..7ba8b774d5 100644
--- a/lib/System/Atomic.cpp
+++ b/lib/System/Atomic.cpp
@@ -85,7 +85,7 @@ sys::cas_flag sys::AtomicAdd(volatile sys::cas_flag* ptr, sys::cas_flag val) {
#elif defined(__GNUC__)
return __sync_add_and_fetch(ptr, val);
#elif defined(_MSC_VER)
- return InterlockedAdd(ptr, val);
+ return InterlockedExchangeAdd(ptr, val) + val;
#else
# error No atomic add implementation for your platform!
#endif