From b58d652ce56dc30f258d0b5c85eb97c8729ed9d5 Mon Sep 17 00:00:00 2001 From: Mathias LANG Date: Fri, 14 Oct 2022 07:23:22 +0900 Subject: [PATCH 1/3] Re-instate accidentally reverted fixes on RefCounted (#8599) Those fixes were done in PR #8509 but PR #8368 accidentally reverted them. --- std/typecons.d | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/std/typecons.d b/std/typecons.d index 5b60679bb..231ac9302 100644 --- a/std/typecons.d +++ b/std/typecons.d @@ -10129,15 +10129,11 @@ struct RefCounted(T, RefCountedAutoInitialize autoInit = private enum enableGCScan = hasIndirections!T; } - // TODO remove pure when https://issues.dlang.org/show_bug.cgi?id=15862 has been fixed extern(C) private pure nothrow @nogc static { pragma(mangle, "free") void pureFree( void *ptr ); static if (enableGCScan) - { - pragma(mangle, "gc_addRange") void pureGcAddRange( in void* p, size_t sz, const TypeInfo ti = null ); - pragma(mangle, "gc_removeRange") void pureGcRemoveRange( in void* p ); - } + import core.memory : GC; } struct RefCountedStore @@ -10176,7 +10172,7 @@ struct RefCounted(T, RefCountedAutoInitialize autoInit = { import std.internal.memory : enforceCalloc; _store = cast(Impl*) enforceCalloc(1, Impl.sizeof); - pureGcAddRange(&_store._payload, T.sizeof); + GC.addRange(&_store._payload, T.sizeof); } else { @@ -10189,7 +10185,7 @@ struct RefCounted(T, RefCountedAutoInitialize autoInit = { static if (enableGCScan) { - pureGcRemoveRange(&this._store._payload); + GC.removeRange(&this._store._payload); } pureFree(_store); _store = null; From 1d50f24922d9e0e821aa175b4e2ffa252eeb67ef Mon Sep 17 00:00:00 2001 From: Geod24 Date: Fri, 14 Oct 2022 11:57:57 +0200 Subject: [PATCH 2/3] Remove usages of 'in' on Windows C bindings --- std/internal/windows/advapi32.d | 4 +++- std/stdio.d | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/std/internal/windows/advapi32.d b/std/internal/windows/advapi32.d index 6f999ba80..1b26f43c3 100644 --- a/std/internal/windows/advapi32.d +++ b/std/internal/windows/advapi32.d @@ -36,7 +36,9 @@ pragma(lib, "advapi32.lib"); HMODULE hAdvapi32 = null; extern (Windows) { - LONG function(in HKEY hkey, in LPCWSTR lpSubKey, in REGSAM samDesired, in DWORD reserved) pRegDeleteKeyExW; + LONG function( + scope const HKEY hkey, scope const LPCWSTR lpSubKey, + scope const REGSAM samDesired, scope const DWORD reserved) pRegDeleteKeyExW; } void loadAdvapi32() diff --git a/std/stdio.d b/std/stdio.d index fea9b4c8d..ffd6da8c4 100644 --- a/std/stdio.d +++ b/std/stdio.d @@ -145,8 +145,8 @@ version (Windows) // encoded in CP_ACP on Windows instead of UTF-8. /+ Waiting for druntime pull 299 +/ - extern (C) nothrow @nogc FILE* _wfopen(in wchar* filename, in wchar* mode); - extern (C) nothrow @nogc FILE* _wfreopen(in wchar* filename, in wchar* mode, FILE* fp); + extern (C) nothrow @nogc FILE* _wfopen(scope const wchar* filename, scope const wchar* mode); + extern (C) nothrow @nogc FILE* _wfreopen(scope const wchar* filename, scope const wchar* mode, FILE* fp); import core.sys.windows.basetsd : HANDLE; } From 5645d87eb165be79d49d54cd9ccdce921c5229a9 Mon Sep 17 00:00:00 2001 From: Martin Kinkelin Date: Wed, 30 Nov 2022 22:31:57 +0100 Subject: [PATCH 3/3] 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 {