Loading...
common/Algorithm.h dyld-1340 dyld-1162
--- dyld/dyld-1340/common/Algorithm.h
+++ dyld/dyld-1162/common/Algorithm.h
@@ -24,6 +24,8 @@
 #ifndef Algorithm_h
 #define Algorithm_h
 
+#if BUILDING_MACHO_WRITER
+
 #include <atomic>
 #include <algorithm>
 #include <optional>
@@ -67,19 +69,8 @@
     // call map(elements range) on each MAP object for a subrange of elements
     const size_t chunkCount     = (elements.size() + (elementsPerChunk - 1)) / elementsPerChunk;
     const size_t lastChunkIndex = chunkCount - 1;
-
-    // rdar://130080127 (Inputs with lots of potential duplicate functions may exhaust available stack space)
-    std::unique_ptr<ChunkTy[]> chunksHeapStorage;
-    ChunkTy*                   chunks = nullptr;
-    constexpr size_t MaxStackAllocaSize = 1 << 17; // limit at 128kb
-    if ( (sizeof(ChunkTy) * chunkCount) <= MaxStackAllocaSize ) {
-        void* space = alloca(sizeof(ChunkTy) * chunkCount);
-        chunks = new (space) ChunkTy[chunkCount];
-    } else {
-        chunksHeapStorage = std::make_unique<ChunkTy[]>(chunkCount);
-        chunks = chunksHeapStorage.get();
-    }
-
+    ChunkTy      chunksStorage[chunkCount];
+    ChunkTy*     chunks = chunksStorage; // work around clang bug
     dispatchApply(std::span(chunks, chunkCount), ^(size_t i, ChunkTy& chunk) {
         if ( i == lastChunkIndex )
             map(i, chunk, elements.subspan(i * elementsPerChunk)); // Run the last chunk with whatever is left over
@@ -231,24 +222,6 @@
 
     outVec.reserve(outVec.size() + totalSize);
     for ( auto& chunk : chunks ) {
-        if ( !chunk.empty() )
-            outVec.insert(outVec.end(), chunk.begin(), chunk.end());
-    }
-}
-
-template<typename ValTy>
-inline void mergeVectorChunks(std::vector<ValTy>& outVec, std::vector<ValTy>* chunks, size_t numChunks, size_t stride)
-{
-    size_t totalSize = 0;
-    for ( size_t i = 0; i < numChunks; ++i ) {
-        std::vector<ValTy>* chunk = (std::vector<ValTy>*)((uint8_t*)chunks + i * stride);
-        totalSize += chunk->size();
-    }
-    if ( totalSize == 0 ) return;
-
-    outVec.reserve(outVec.size() + totalSize);
-    for ( size_t i = 0; i < numChunks; ++i ) {
-        std::vector<ValTy>& chunk = *(std::vector<ValTy>*)((uint8_t*)chunks + i * stride);
         if ( !chunk.empty() )
             outVec.insert(outVec.end(), chunk.begin(), chunk.end());
     }
@@ -416,4 +389,6 @@
     parallelSort(c, std::less<std::remove_reference_t<decltype(*c.begin())>>{});
 }
 
+#endif
+
 #endif /* Algorithm_h */