diff --git a/modules/juce_audio_basics/buffers/juce_FloatVectorOperations.cpp b/modules/juce_audio_basics/buffers/juce_FloatVectorOperations.cpp index 4f3920bfc1..0f91bc2426 100644 --- a/modules/juce_audio_basics/buffers/juce_FloatVectorOperations.cpp +++ b/modules/juce_audio_basics/buffers/juce_FloatVectorOperations.cpp @@ -481,6 +481,17 @@ namespace FloatVectorHelpers #endif } +//============================================================================== +namespace +{ + #if JUCE_USE_VDSP_FRAMEWORK + // This casts away constness to account for slightly different vDSP function signatures + // in OSX 10.8 SDK and below. Can be safely removed once those SDKs are obsolete. + template + ValueType* osx108sdkCompatibilityCast (const ValueType* arg) noexcept { return const_cast (arg); } + #endif +} + //============================================================================== void JUCE_CALLTYPE FloatVectorOperations::clear (float* dest, int num) noexcept { @@ -571,7 +582,7 @@ void JUCE_CALLTYPE FloatVectorOperations::add (double* dest, double amount, int void JUCE_CALLTYPE FloatVectorOperations::add (float* dest, const float* src, float amount, int num) noexcept { #if JUCE_USE_VDSP_FRAMEWORK - vDSP_vsadd ((float*) src, 1, &amount, dest, 1, (vDSP_Length) num); + vDSP_vsadd (osx108sdkCompatibilityCast (src), 1, &amount, dest, 1, (vDSP_Length) num); #else JUCE_PERFORM_VEC_OP_SRC_DEST (dest[i] = src[i] + amount, Mode::add (am, s), JUCE_LOAD_SRC, JUCE_INCREMENT_SRC_DEST, @@ -582,7 +593,7 @@ void JUCE_CALLTYPE FloatVectorOperations::add (float* dest, const float* src, fl void JUCE_CALLTYPE FloatVectorOperations::add (double* dest, const double* src, double amount, int num) noexcept { #if JUCE_USE_VDSP_FRAMEWORK - vDSP_vsaddD ((double*) src, 1, &amount, dest, 1, (vDSP_Length) num); + vDSP_vsaddD (osx108sdkCompatibilityCast (src), 1, &amount, dest, 1, (vDSP_Length) num); #else JUCE_PERFORM_VEC_OP_SRC_DEST (dest[i] = src[i] + amount, Mode::add (am, s), JUCE_LOAD_SRC, JUCE_INCREMENT_SRC_DEST,