No matching function call to OSAtomicAdd64Barrier


#1

As mentioned first here:
http://www.rawmaterialsoftware.com/viewtopic.php?f=4&t=5697#p31075

… I’m getting this compile error (using the tip) on Mac and iOS. I thought it might be my out of date projects so I went to build the new Jucer to remake them but got the error there too!

It seems to be PPC and ARM6 related so not bulding for those architectures fixes it - so perhaps there’s some conditional compile stuff related to those archs that’s not quite right.


#2

BTW the error is at line 234 juce_Atomic.h


#3

OK, found the problem. The 0 need casting to the appropriate type for the templated substitute for OSAtomicAdd64Barrier. Lines 229-42 of juce_Atomic.h. I think my observations re: architectures might have been mistaken although of course this might have affected PPC.

template <typename Type> inline Type Atomic<Type>::get() const throw() { #if JUCE_ATOMICS_MAC return sizeof (Type) == 4 ? castFrom32Bit ((int32) OSAtomicAdd32Barrier ((int32_t)0, (volatile int32_t*) &value)) : castFrom64Bit ((int64) OSAtomicAdd64Barrier ((int64_t)0, (volatile int64_t*) &value)); #elif JUCE_ATOMICS_WINDOWS return sizeof (Type) == 4 ? castFrom32Bit ((int32) juce_InterlockedExchangeAdd ((volatile long*) &value, (long) 0)) : castFrom64Bit ((int64) juce_InterlockedExchangeAdd64 ((volatile __int64*) &value, (__int64) 0)); #elif JUCE_ATOMICS_GCC return sizeof (Type) == 4 ? castFrom32Bit ((int32) __sync_add_and_fetch ((volatile int32*) &value, 0)) : castFrom64Bit ((int64) __sync_add_and_fetch ((volatile int64*) &value, 0)); #endif }


#4

Sorry, I had a fix for that but hadn’t checked it in - it’s there now.