Skip to content

Commit 13680bc

Browse files
committed
ArrayBase: Add function preconditions to removeElementsInternal and suppress GCC 16 stringop-overflow warning that is irrelevant when preconditions are met
1 parent 5cdc21b commit 13680bc

1 file changed

Lines changed: 11 additions & 2 deletions

File tree

modules/juce_core/containers/juce_ArrayBase.h

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -483,15 +483,24 @@ class ArrayBase : public TypeOfCriticalSectionToUse
483483
//==============================================================================
484484
void removeElementsInternal (int indexToRemoveAt, int numElementsToRemove)
485485
{
486+
jassert (0 <= indexToRemoveAt);
487+
jassert (0 <= numElementsToRemove);
488+
489+
const auto endOfRemovedRange = indexToRemoveAt + numElementsToRemove;
490+
jassert (endOfRemovedRange <= numUsed);
491+
492+
const auto numElementsToShift = numUsed - endOfRemovedRange;
493+
486494
if constexpr (isTriviallyCopyable)
487495
{
488496
auto* start = elements + indexToRemoveAt;
489-
auto numElementsToShift = numUsed - (indexToRemoveAt + numElementsToRemove);
497+
498+
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wstringop-overflow")
490499
memmove (start, start + numElementsToRemove, (size_t) numElementsToShift * sizeof (ElementType));
500+
JUCE_END_IGNORE_WARNINGS_GCC_LIKE
491501
}
492502
else
493503
{
494-
auto numElementsToShift = numUsed - (indexToRemoveAt + numElementsToRemove);
495504
auto* destination = elements + indexToRemoveAt;
496505
auto* source = destination + numElementsToRemove;
497506

0 commit comments

Comments
 (0)