From 7fea966a1d78c66d606fd5f132207beac4b293dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Zasso?= Date: Mon, 12 Sep 2016 11:50:56 +0200 Subject: [PATCH] deps: cherry-pick workaround for clang-3.4 ICE Fixes: https://github.com/nodejs/node/issues/8323 Refs: https://github.com/nodejs/node/pull/8343 Refs: https://github.com/nodejs/node/pull/8317 PR-URL: https://github.com/nodejs/node/pull/11029 Reviewed-By: Ben Noordhuis Reviewed-By: Anna Henningsen Reviewed-By: Myles Borins --- deps/v8/src/heap/mark-compact.cc | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/deps/v8/src/heap/mark-compact.cc b/deps/v8/src/heap/mark-compact.cc index 7e5ef96fc9889c..838f137e9f44d9 100644 --- a/deps/v8/src/heap/mark-compact.cc +++ b/deps/v8/src/heap/mark-compact.cc @@ -3673,10 +3673,20 @@ int NumberOfPointerUpdateTasks(int pages) { template void UpdatePointersInParallel(Heap* heap, base::Semaphore* semaphore) { + // Work-around bug in clang-3.4 + // https://github.com/nodejs/node/issues/8323 + struct MemoryChunkVisitor { + PageParallelJob >& job_; + MemoryChunkVisitor(PageParallelJob >& job) + : job_(job) {} + void operator()(MemoryChunk* chunk) { + job_.AddPage(chunk, 0); + } + }; + PageParallelJob > job( heap, heap->isolate()->cancelable_task_manager(), semaphore); - RememberedSet::IterateMemoryChunks( - heap, [&job](MemoryChunk* chunk) { job.AddPage(chunk, 0); }); + RememberedSet::IterateMemoryChunks(heap, MemoryChunkVisitor(job)); int num_pages = job.NumberOfPages(); int num_tasks = NumberOfPointerUpdateTasks(num_pages); job.Run(num_tasks, [](int i) { return 0; });