From 5645d87eb165be79d49d54cd9ccdce921c5229a9 Mon Sep 17 00:00:00 2001 From: Martin Kinkelin Date: Wed, 30 Nov 2022 22:31:57 +0100 Subject: [PATCH] Fix Issue 22745 - std.parallelism.parallel fails to process empty range on a single CPU --- std/parallelism.d | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/std/parallelism.d b/std/parallelism.d index 2c976388d..bab394a6b 100644 --- a/std/parallelism.d +++ b/std/parallelism.d @@ -1508,7 +1508,7 @@ public: if (this.size == 0) { - return rangeLen; + return max(rangeLen, 1); } immutable size_t eightSize = 4 * (this.size + 1); @@ -3644,6 +3644,15 @@ ParallelForeach!R parallel(R)(R range, size_t workUnitSize) assert(arrIndex.sum == 10.iota.sum); } +// https://issues.dlang.org/show_bug.cgi?id=22745 +@system unittest +{ + auto pool = new TaskPool(0); + int[] empty; + foreach (i; pool.parallel(empty)) {} + pool.finish(); +} + // Thrown when a parallel foreach loop is broken from. class ParallelForeachError : Error {