From 8809efcb7afbc05e98664f5143a69a55bca5dcbb Mon Sep 17 00:00:00 2001 From: jules Date: Thu, 26 Sep 2013 16:17:36 +0100 Subject: [PATCH] A few tweaks to help the clang static analyser avoid false alarms. --- .../codecs/juce_QuickTimeAudioFormat.cpp | 28 +++++++++---------- modules/juce_core/containers/juce_Array.h | 12 +++++--- .../juce_core/containers/juce_OwnedArray.h | 9 ++++-- .../containers/juce_ReferenceCountedArray.h | 1 + 4 files changed, 30 insertions(+), 20 deletions(-) diff --git a/modules/juce_audio_formats/codecs/juce_QuickTimeAudioFormat.cpp b/modules/juce_audio_formats/codecs/juce_QuickTimeAudioFormat.cpp index 355bbb9d4b..e73b4ed7ed 100644 --- a/modules/juce_audio_formats/codecs/juce_QuickTimeAudioFormat.cpp +++ b/modules/juce_audio_formats/codecs/juce_QuickTimeAudioFormat.cpp @@ -133,31 +133,31 @@ public: trackUnitsPerFrame = GetMovieTimeScale (movie) * samplesPerFrame / GetMediaTimeScale (media); - OSStatus err = MovieAudioExtractionBegin (movie, 0, &extractor); + MovieAudioExtractionBegin (movie, 0, &extractor); unsigned long output_layout_size; - err = MovieAudioExtractionGetPropertyInfo (extractor, - kQTPropertyClass_MovieAudioExtraction_Audio, - kQTMovieAudioExtractionAudioPropertyID_AudioChannelLayout, - 0, &output_layout_size, 0); + OSStatus err = MovieAudioExtractionGetPropertyInfo (extractor, + kQTPropertyClass_MovieAudioExtraction_Audio, + kQTMovieAudioExtractionAudioPropertyID_AudioChannelLayout, + 0, &output_layout_size, 0); if (err != noErr) return; HeapBlock qt_audio_channel_layout; qt_audio_channel_layout.calloc (output_layout_size, 1); - err = MovieAudioExtractionGetProperty (extractor, - kQTPropertyClass_MovieAudioExtraction_Audio, - kQTMovieAudioExtractionAudioPropertyID_AudioChannelLayout, - output_layout_size, qt_audio_channel_layout, 0); + MovieAudioExtractionGetProperty (extractor, + kQTPropertyClass_MovieAudioExtraction_Audio, + kQTMovieAudioExtractionAudioPropertyID_AudioChannelLayout, + output_layout_size, qt_audio_channel_layout, 0); qt_audio_channel_layout[0].mChannelLayoutTag = kAudioChannelLayoutTag_Stereo; - err = MovieAudioExtractionSetProperty (extractor, - kQTPropertyClass_MovieAudioExtraction_Audio, - kQTMovieAudioExtractionAudioPropertyID_AudioChannelLayout, - output_layout_size, - qt_audio_channel_layout); + MovieAudioExtractionSetProperty (extractor, + kQTPropertyClass_MovieAudioExtraction_Audio, + kQTMovieAudioExtractionAudioPropertyID_AudioChannelLayout, + output_layout_size, + qt_audio_channel_layout); err = MovieAudioExtractionGetProperty (extractor, kQTPropertyClass_MovieAudioExtraction_Audio, diff --git a/modules/juce_core/containers/juce_Array.h b/modules/juce_core/containers/juce_Array.h index 3e96b68d63..3646b0a80a 100644 --- a/modules/juce_core/containers/juce_Array.h +++ b/modules/juce_core/containers/juce_Array.h @@ -279,8 +279,7 @@ public: inline ElementType getFirst() const { const ScopedLockType lock (getLock()); - return (numUsed > 0) ? data.elements [0] - : ElementType(); + return numUsed > 0 ? data.elements[0] : ElementType(); } /** Returns the last element in the array, or a default value if the array is empty. @@ -290,8 +289,7 @@ public: inline ElementType getLast() const { const ScopedLockType lock (getLock()); - return (numUsed > 0) ? data.elements [numUsed - 1] - : ElementType(); + return numUsed > 0 ? data.elements[numUsed - 1] : ElementType(); } /** Returns a pointer to the actual array data. @@ -317,6 +315,11 @@ public: */ inline ElementType* end() const noexcept { + #if JUCE_DEBUG + if (data.elements == nullptr || numUsed <= 0) // (to keep static analysers happy) + return data.elements; + #endif + return data.elements + numUsed; } @@ -519,6 +522,7 @@ public: if (isPositiveAndBelow (indexToChange, numUsed)) { + jassert (data.elements != nullptr); data.elements [indexToChange] = newValue; } else if (indexToChange >= 0) diff --git a/modules/juce_core/containers/juce_OwnedArray.h b/modules/juce_core/containers/juce_OwnedArray.h index 5a29fa3c25..7458fe61eb 100644 --- a/modules/juce_core/containers/juce_OwnedArray.h +++ b/modules/juce_core/containers/juce_OwnedArray.h @@ -167,7 +167,7 @@ public: { const ScopedLockType lock (getLock()); return numUsed > 0 ? data.elements [0] - : static_cast (nullptr); + : static_cast (nullptr); } /** Returns a pointer to the last object in the array. @@ -179,7 +179,7 @@ public: { const ScopedLockType lock (getLock()); return numUsed > 0 ? data.elements [numUsed - 1] - : static_cast (nullptr); + : static_cast (nullptr); } /** Returns a pointer to the actual array data. @@ -205,6 +205,11 @@ public: */ inline ObjectClass** end() const noexcept { + #if JUCE_DEBUG + if (data.elements == nullptr || numUsed <= 0) // (to keep static analysers happy) + return data.elements; + #endif + return data.elements + numUsed; } diff --git a/modules/juce_core/containers/juce_ReferenceCountedArray.h b/modules/juce_core/containers/juce_ReferenceCountedArray.h index fba2fa4133..28614e12eb 100644 --- a/modules/juce_core/containers/juce_ReferenceCountedArray.h +++ b/modules/juce_core/containers/juce_ReferenceCountedArray.h @@ -180,6 +180,7 @@ public: inline ObjectClass* getObjectPointer (const int index) const noexcept { const ScopedLockType lock (getLock()); + jassert (isPositiveAndBelow (index, numUsed)); return isPositiveAndBelow (index, numUsed) ? data.elements [index] : nullptr; }