From 1227f3f62080152b7f3f1ef636e446f34a51a6f0 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Fri, 23 Mar 2012 10:24:50 +0000 Subject: [PATCH] From Ulrich Hertlein, "as discussed on osg-users there is an issue with clang++ on OS X and iOS that results in the following error: Users/stephan/Documents/Projekte/cefix/cefix/ios/../../libs/ios/include/OpenThreads/Atomic:244:48: error: cannot initialize a parameter of type 'void *' with an lvalue of type 'const void *const' return __sync_bool_compare_and_swap(&_ptr, ptrOld, ptrNew); This can be solved by a cast to '(void*)ptrOld'. This should be benign since both 'ptrOld' and 'ptrNew' are only read and the cast is in fact in place for all other implementations as well. On OS X the cast compiles cleanly on both g++ (i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1) and clang++ (Apple clang version 3.1 (tags/Apple/clang-318.0.54)). " --- src/OpenThreads/common/Atomic.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/OpenThreads/common/Atomic.cpp b/src/OpenThreads/common/Atomic.cpp index a2788257a..21c336435 100644 --- a/src/OpenThreads/common/Atomic.cpp +++ b/src/OpenThreads/common/Atomic.cpp @@ -143,7 +143,7 @@ bool AtomicPtr::assign(void* ptrNew, const void* const ptrOld) { #if defined(_OPENTHREADS_ATOMIC_USE_GCC_BUILTINS) - return __sync_bool_compare_and_swap(&_ptr, ptrOld, ptrNew); + return __sync_bool_compare_and_swap(&_ptr, (void*)ptrOld, ptrNew); #elif defined(_OPENTHREADS_ATOMIC_USE_WIN32_INTERLOCKED) return ptrOld == InterlockedCompareExchangePointer((PVOID volatile*)&_ptr, (PVOID)ptrNew, (PVOID)ptrOld); #elif defined(_OPENTHREADS_ATOMIC_USE_BSD_ATOMIC)