October 21, 2020
On Wednesday, 21 October 2020 at 23:02:07 UTC, donallen wrote:
> On Wednesday, 21 October 2020 at 22:28:48 UTC, H. S. Teoh wrote:
>> [...]
>
> I will try.
>
> My suspicion that there's a gc problem largely rests on the fact that when I run the program with the gc disabled, the problem goes away -- it behaves as it should.
>
> Do you know if there's any way to configure the gc so it tells you what it's doing? It would be great if it could be told to announce when it's running and what it's collecting. I did a little looking in the documentation yesterday for that and did not find anything. If you can't help in that area, I'll have a look at the gc source code.
>
>> [...]

There are some flags and options, but if you can't find one that fixes your bug I would use something like bpf or gdb to watch it manually (if possible). GDB supports d demangling.
October 22, 2020
Try adding:

import core.memory : GC;
Account[] children = new Account[n_children];

GC.addRoot(children.ptr);
scope(exit)
	GC.removeRoot(children.ptr);

With the GC turned on, does it still cause issues?
Also are you compiling for 64bit or 32bit?
October 22, 2020
donallen wrote:

> But working with gdb, I found that the account structs after the error messages start are zeroed.
GC should not zero any memory by itself (it doesn't "clear" freed chunks). it looks like the GC is reusing the allocated memory.

you can use `core.memory.GC.addrOf()` to check if your pointers are still "alive". you can add calls to `addrOf()` before processing a data, it may help to catch the moment data is incorrectly freed (if that happens).
October 22, 2020
On Thursday, 22 October 2020 at 00:53:55 UTC, rikki cattermole wrote:
> Try adding:
>
> import core.memory : GC;
> Account[] children = new Account[n_children];
>
> GC.addRoot(children.ptr);
> scope(exit)
> 	GC.removeRoot(children.ptr);
>
> With the GC turned on, does it still cause issues?
> Also are you compiling for 64bit or 32bit?

I tried this. With the gc on, the problem still occurs.

I am working on 64-bit Arch Linux systems, up-to-date, DMD64 D Compiler v2.094.0
October 22, 2020
On Thursday, 22 October 2020 at 01:30:41 UTC, ketmar wrote:
> donallen wrote:
>
>> But working with gdb, I found that the account structs after the error messages start are zeroed.
> GC should not zero any memory by itself (it doesn't "clear" freed chunks). it looks like the GC is reusing the allocated memory.

The thought did occur to me as well that the zeroing probably occurs on allocation, but I don't see how you get from that to the behavior I'm observing, since the children array gets  populated with data right after allocation. It appears that the Account structs being passed in the recursive calls to walk_account_tree, which are elements of the children array, are zeroed.

>
> you can use `core.memory.GC.addrOf()` to check if your pointers are still "alive". you can add calls to `addrOf()` before processing a data, it may help to catch the moment data is incorrectly freed (if that happens).

I'll give this a try tomorrow. Thanks.


October 22, 2020
On 22/10/2020 5:02 PM, donallen wrote:
> I tried this. With the gc on, the problem still occurs.

It won't be the GC then.

I would look at stack corruption, so maybe look into valgrind.
October 22, 2020
On Wednesday, 21 October 2020 at 21:26:36 UTC, donallen wrote:
> On Wednesday, 21 October 2020 at 19:30:40 UTC, Imperatorn wrote:
>> On Wednesday, 21 October 2020 at 16:24:41 UTC, donallen wrote:
>>> I'm new to D, but not to programming (I wrote my first line of code 60 years ago and am retired from a long career as a developer and project manager).
>>>
>>> [...]
>>
>> What's your i and n_children on panic?
>
> There is no panic. The program starts complaining about the account data that it is checking, spewing bogus error messages. This is because the Account structures have been zeroed at some point in the recursive descent.
>
> But I did set a breakpoint in gdb at the place where the error messages are issued, and i was something like 230 of an n_children of something like 350. I don't think either number is particularly significant, other than that this was an account that had a lot of children and so was likely to trigger a gc.

Oh, sorry, I mis-read something 🐣

A divide and conquer approach would otherwise be to enable() and disable() GC at various places to narrow it down. Or even do a collect() and look at addrOf as stated earlier.

Would be good to know if there really is a bug in the GC or not. I suspect not, but you can't know for sure until you try.
October 22, 2020
Some new things:

1. I tried building with the gc-profile option, like so:

dmd -g -profile=gc -I=../library -L='-lsqlite3' verifier.d ../library/lib.o

When I run the program built this way, the problem does not occur. There is also no gc profiling output. Makes me wonder if the compile-time option somehow altered things (increased heap size?) that resulted in no gcs? Pure speculation on my part, but it is consistent with the behavior (program works correctly when the gc doesn't run, no profiling output suggests no gc).

But if I enable gc profiling at the command line:
verifier "--DRT-gcopt=profile:1" /tmp/Finances.newcash

the problem does occur and I get profiling output:
        Number of collections:  3
        Total GC prep time:  0 milliseconds
        Total mark time:  0 milliseconds
        Total sweep time:  0 milliseconds
        Max Pause Time:  0 milliseconds
        Grand total GC time:  0 milliseconds
GC summary:    5 MB,    3 GC    0 ms, Pauses    0 ms <    0 ms

2. I tried adding a call to addrOf(children.ptr), panicking on a null return, just before the recursive calls to the tree walker. No panic.

I will look into a way to reproduce this that I can give to the project. The problem is not the code -- it's the data. The database that the D version of the verifier is failing on contains literally decades of our financial transactions. So while there is nothing illegal, immoral or fattening in it, it's nobody's business but ours. So I need to create a new database with no personal info in it that provokes the problem.

I will also look into running the verifier under Valgrind.

I don't know when I will be able to devote more time to this. Like everyone, I've got other things on my plate.

Thanks to everyone who has tried to help.


October 22, 2020
Realizing that running this thing under valgrind was easy, I did so:

valgrind --leak-check=yes --track-origins=yes ./verifier /tmp/Finances.newcash > /tmp/vg.output 2>&1

and then

ddemangle /tmp/vg.output > /tmp/vg-demangled.output

Here is the first half of the output (posting in two parts because it's big), which suggests a problem in the gc (the messages beginning "requires a link to a commodity ..." are the bogus errors produced by the verifier due to looking at zeroed Account structs; I've removed the duplicates):

==3854== Memcheck, a memory error detector
==3854== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==3854== Using Valgrind-3.16.1 and LibVEX; rerun with -h for copyright info
==3854== Command: ./verifier /tmp/Finances.newcash
==3854==
==3854== Conditional jump or move depends on uninitialised value(s)
==3854==    at 0x21D7C6: nothrow scope void gc.impl.conservative.gc.Gcx.collectRoots(void*, void*) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x23BD4B: nothrow void core.thread.threadbase.thread_scanAll(scope void delegate(void*, void*) nothrow).__lambda2!(core.thread.threadbase.ScanType, void*, void*).__lambda2(core.thread.threadbase.ScanType, void*, void*) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x2472CF: nothrow void core.thread.threadbase.scanAllTypeImpl(scope void delegate(core.thread.threadbase.ScanType, void*, void*) nothrow, void*) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x24720C: nothrow void core.thread.threadbase.thread_scanAllType(scope void delegate(core.thread.threadbase.ScanType, void*, void*) nothrow).__lambda2!(void*).__lambda2(void*) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x211EEF: nothrow void core.thread.osthread.callWithStackShell(scope void delegate(void*) nothrow) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x2471E1: thread_scanAllType (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x23BD11: thread_scanAll (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21D901: nothrow void gc.impl.conservative.gc.Gcx.collectAllRoots(bool) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21EFF9: nothrow void gc.impl.conservative.gc.Gcx.markParallel(bool) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21E959: nothrow ulong gc.impl.conservative.gc.Gcx.fullcollect(bool) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21CBFC: nothrow void* gc.impl.conservative.gc.Gcx.smallAlloc(ulong, ref ulong, uint, const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x2227C0: nothrow void* gc.impl.conservative.gc.ConservativeGC.runLocked!(gc.impl.conservative.gc.ConservativeGC.mallocNoSync(ulong, uint, ref ulong, const(TypeInfo)), gc.impl.conservative.gc.mallocTime, gc.impl.conservative.gc.numMallocs, ulong, uint, ulong, const(TypeInfo)).runLocked(ref ulong, ref uint, ref ulong, ref const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==  Uninitialised value was created by a stack allocation
==3854==    at 0x211EBC: nothrow void core.thread.osthread.callWithStackShell(scope void delegate(void*) nothrow) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==
==3854== Thread 2:
==3854== Conditional jump or move depends on uninitialised value(s)
==3854==    at 0x224995: nothrow scope void gc.impl.conservative.gc.Gcx.mark!(false, true).mark(gc.impl.conservative.gc.Gcx.ScanRange!(false).ScanRange) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x225007: nothrow void gc.impl.conservative.gc.Gcx.pullFromScanStackImpl!(false).pullFromScanStackImpl() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21F645: nothrow void gc.impl.conservative.gc.Gcx.scanBackground() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x23C0D2: extern (C) nothrow void* core.thread.osthread.createLowLevelThread(void delegate() nothrow, uint, void delegate() nothrow).thread_lowlevelEntry(void*) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x49B03E8: start_thread (in /usr/lib/libpthread-2.32.so)
==3854==    by 0x4C3C292: clone (in /usr/lib/libc-2.32.so)
==3854==  Uninitialised value was created by a stack allocation
==3854==    at 0x1E9048: _d_newitemT (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==
==3854== Conditional jump or move depends on uninitialised value(s)
==3854==    at 0x2249A8: nothrow scope void gc.impl.conservative.gc.Gcx.mark!(false, true).mark(gc.impl.conservative.gc.Gcx.ScanRange!(false).ScanRange) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x225007: nothrow void gc.impl.conservative.gc.Gcx.pullFromScanStackImpl!(false).pullFromScanStackImpl() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21F645: nothrow void gc.impl.conservative.gc.Gcx.scanBackground() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x23C0D2: extern (C) nothrow void* core.thread.osthread.createLowLevelThread(void delegate() nothrow, uint, void delegate() nothrow).thread_lowlevelEntry(void*) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x49B03E8: start_thread (in /usr/lib/libpthread-2.32.so)
==3854==    by 0x4C3C292: clone (in /usr/lib/libc-2.32.so)
==3854==  Uninitialised value was created by a stack allocation
==3854==    at 0x1E9048: _d_newitemT (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==
==3854== Conditional jump or move depends on uninitialised value(s)
==3854==    at 0x2249B7: nothrow scope void gc.impl.conservative.gc.Gcx.mark!(false, true).mark(gc.impl.conservative.gc.Gcx.ScanRange!(false).ScanRange) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x225007: nothrow void gc.impl.conservative.gc.Gcx.pullFromScanStackImpl!(false).pullFromScanStackImpl() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21F645: nothrow void gc.impl.conservative.gc.Gcx.scanBackground() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x23C0D2: extern (C) nothrow void* core.thread.osthread.createLowLevelThread(void delegate() nothrow, uint, void delegate() nothrow).thread_lowlevelEntry(void*) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x49B03E8: start_thread (in /usr/lib/libpthread-2.32.so)
==3854==    by 0x4C3C292: clone (in /usr/lib/libc-2.32.so)
==3854==  Uninitialised value was created by a stack allocation
==3854==    at 0x1E9048: _d_newitemT (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==
==3854== Conditional jump or move depends on uninitialised value(s)
==3854==    at 0x2249BE: nothrow scope void gc.impl.conservative.gc.Gcx.mark!(false, true).mark(gc.impl.conservative.gc.Gcx.ScanRange!(false).ScanRange) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x225007: nothrow void gc.impl.conservative.gc.Gcx.pullFromScanStackImpl!(false).pullFromScanStackImpl() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21F645: nothrow void gc.impl.conservative.gc.Gcx.scanBackground() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x23C0D2: extern (C) nothrow void* core.thread.osthread.createLowLevelThread(void delegate() nothrow, uint, void delegate() nothrow).thread_lowlevelEntry(void*) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x49B03E8: start_thread (in /usr/lib/libpthread-2.32.so)
==3854==    by 0x4C3C292: clone (in /usr/lib/libc-2.32.so)
==3854==  Uninitialised value was created by a stack allocation
==3854==    at 0x1E9048: _d_newitemT (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==
==3854== Use of uninitialised value of size 8
==3854==    at 0x224A0A: nothrow scope void gc.impl.conservative.gc.Gcx.mark!(false, true).mark(gc.impl.conservative.gc.Gcx.ScanRange!(false).ScanRange) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x225007: nothrow void gc.impl.conservative.gc.Gcx.pullFromScanStackImpl!(false).pullFromScanStackImpl() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21F645: nothrow void gc.impl.conservative.gc.Gcx.scanBackground() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x23C0D2: extern (C) nothrow void* core.thread.osthread.createLowLevelThread(void delegate() nothrow, uint, void delegate() nothrow).thread_lowlevelEntry(void*) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x49B03E8: start_thread (in /usr/lib/libpthread-2.32.so)
==3854==    by 0x4C3C292: clone (in /usr/lib/libc-2.32.so)
==3854==  Uninitialised value was created by a stack allocation
==3854==    at 0x1E9048: _d_newitemT (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==
==3854== Use of uninitialised value of size 8
==3854==    at 0x224A4F: nothrow scope void gc.impl.conservative.gc.Gcx.mark!(false, true).mark(gc.impl.conservative.gc.Gcx.ScanRange!(false).ScanRange) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x225007: nothrow void gc.impl.conservative.gc.Gcx.pullFromScanStackImpl!(false).pullFromScanStackImpl() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21F645: nothrow void gc.impl.conservative.gc.Gcx.scanBackground() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x23C0D2: extern (C) nothrow void* core.thread.osthread.createLowLevelThread(void delegate() nothrow, uint, void delegate() nothrow).thread_lowlevelEntry(void*) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x49B03E8: start_thread (in /usr/lib/libpthread-2.32.so)
==3854==    by 0x4C3C292: clone (in /usr/lib/libc-2.32.so)
==3854==  Uninitialised value was created by a stack allocation
==3854==    at 0x1E9048: _d_newitemT (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==
==3854== Use of uninitialised value of size 8
==3854==    at 0x23C1CB: nothrow @nogc ulong gc.bits.GCBits.setLocked(ulong) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x224A6C: nothrow scope void gc.impl.conservative.gc.Gcx.mark!(false, true).mark(gc.impl.conservative.gc.Gcx.ScanRange!(false).ScanRange) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x225007: nothrow void gc.impl.conservative.gc.Gcx.pullFromScanStackImpl!(false).pullFromScanStackImpl() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21F645: nothrow void gc.impl.conservative.gc.Gcx.scanBackground() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x23C0D2: extern (C) nothrow void* core.thread.osthread.createLowLevelThread(void delegate() nothrow, uint, void delegate() nothrow).thread_lowlevelEntry(void*) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x49B03E8: start_thread (in /usr/lib/libpthread-2.32.so)
==3854==    by 0x4C3C292: clone (in /usr/lib/libc-2.32.so)
==3854==  Uninitialised value was created by a stack allocation
==3854==    at 0x1E9048: _d_newitemT (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==
==3854== Use of uninitialised value of size 8
==3854==    at 0x224A8D: nothrow scope void gc.impl.conservative.gc.Gcx.mark!(false, true).mark(gc.impl.conservative.gc.Gcx.ScanRange!(false).ScanRange) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x225007: nothrow void gc.impl.conservative.gc.Gcx.pullFromScanStackImpl!(false).pullFromScanStackImpl() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21F645: nothrow void gc.impl.conservative.gc.Gcx.scanBackground() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x23C0D2: extern (C) nothrow void* core.thread.osthread.createLowLevelThread(void delegate() nothrow, uint, void delegate() nothrow).thread_lowlevelEntry(void*) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x49B03E8: start_thread (in /usr/lib/libpthread-2.32.so)
==3854==    by 0x4C3C292: clone (in /usr/lib/libc-2.32.so)
==3854==  Uninitialised value was created by a stack allocation
==3854==    at 0x1E9048: _d_newitemT (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==
==3854== Conditional jump or move depends on uninitialised value(s)
==3854==    at 0x2249D6: nothrow scope void gc.impl.conservative.gc.Gcx.mark!(false, true).mark(gc.impl.conservative.gc.Gcx.ScanRange!(false).ScanRange) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x225007: nothrow void gc.impl.conservative.gc.Gcx.pullFromScanStackImpl!(false).pullFromScanStackImpl() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21F645: nothrow void gc.impl.conservative.gc.Gcx.scanBackground() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x23C0D2: extern (C) nothrow void* core.thread.osthread.createLowLevelThread(void delegate() nothrow, uint, void delegate() nothrow).thread_lowlevelEntry(void*) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x49B03E8: start_thread (in /usr/lib/libpthread-2.32.so)
==3854==    by 0x4C3C292: clone (in /usr/lib/libc-2.32.so)
==3854==  Uninitialised value was created by a stack allocation
==3854==    at 0x1B77F8: void verifier.main(immutable(char)[][]).walk_account_tree(verifier.main(immutable(char)[][]).Account, int) (verifier.d:84)
==3854==
==3854== Conditional jump or move depends on uninitialised value(s)
==3854==    at 0x2249E3: nothrow scope void gc.impl.conservative.gc.Gcx.mark!(false, true).mark(gc.impl.conservative.gc.Gcx.ScanRange!(false).ScanRange) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x225007: nothrow void gc.impl.conservative.gc.Gcx.pullFromScanStackImpl!(false).pullFromScanStackImpl() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21F645: nothrow void gc.impl.conservative.gc.Gcx.scanBackground() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x23C0D2: extern (C) nothrow void* core.thread.osthread.createLowLevelThread(void delegate() nothrow, uint, void delegate() nothrow).thread_lowlevelEntry(void*) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x49B03E8: start_thread (in /usr/lib/libpthread-2.32.so)
==3854==    by 0x4C3C292: clone (in /usr/lib/libc-2.32.so)
==3854==  Uninitialised value was created by a stack allocation
==3854==    at 0x1B77F8: void verifier.main(immutable(char)[][]).walk_account_tree(verifier.main(immutable(char)[][]).Account, int) (verifier.d:84)
==3854==
==3854== Use of uninitialised value of size 8
==3854==    at 0x224987: nothrow scope void gc.impl.conservative.gc.Gcx.mark!(false, true).mark(gc.impl.conservative.gc.Gcx.ScanRange!(false).ScanRange) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x225007: nothrow void gc.impl.conservative.gc.Gcx.pullFromScanStackImpl!(false).pullFromScanStackImpl() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21F645: nothrow void gc.impl.conservative.gc.Gcx.scanBackground() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x23C0D2: extern (C) nothrow void* core.thread.osthread.createLowLevelThread(void delegate() nothrow, uint, void delegate() nothrow).thread_lowlevelEntry(void*) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x49B03E8: start_thread (in /usr/lib/libpthread-2.32.so)
==3854==    by 0x4C3C292: clone (in /usr/lib/libc-2.32.so)
==3854==  Uninitialised value was created by a stack allocation
==3854==    at 0x1B77F8: void verifier.main(immutable(char)[][]).walk_account_tree(verifier.main(immutable(char)[][]).Account, int) (verifier.d:84)
==3854==
==3854== Conditional jump or move depends on uninitialised value(s)
==3854==    at 0x224C56: nothrow scope void gc.impl.conservative.gc.Gcx.mark!(false, true).mark(gc.impl.conservative.gc.Gcx.ScanRange!(false).ScanRange) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x225007: nothrow void gc.impl.conservative.gc.Gcx.pullFromScanStackImpl!(false).pullFromScanStackImpl() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21F645: nothrow void gc.impl.conservative.gc.Gcx.scanBackground() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x23C0D2: extern (C) nothrow void* core.thread.osthread.createLowLevelThread(void delegate() nothrow, uint, void delegate() nothrow).thread_lowlevelEntry(void*) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x49B03E8: start_thread (in /usr/lib/libpthread-2.32.so)
==3854==    by 0x4C3C292: clone (in /usr/lib/libc-2.32.so)
==3854==  Uninitialised value was created by a stack allocation
==3854==    at 0x1B77F8: void verifier.main(immutable(char)[][]).walk_account_tree(verifier.main(immutable(char)[][]).Account, int) (verifier.d:84)
==3854==
==3854== Thread 1:
==3854== Conditional jump or move depends on uninitialised value(s)
==3854==    at 0x224995: nothrow scope void gc.impl.conservative.gc.Gcx.mark!(false, true).mark(gc.impl.conservative.gc.Gcx.ScanRange!(false).ScanRange) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21F137: nothrow void gc.impl.conservative.gc.Gcx.markParallel(bool) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21E959: nothrow ulong gc.impl.conservative.gc.Gcx.fullcollect(bool) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21CBFC: nothrow void* gc.impl.conservative.gc.Gcx.smallAlloc(ulong, ref ulong, uint, const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x2227C0: nothrow void* gc.impl.conservative.gc.ConservativeGC.runLocked!(gc.impl.conservative.gc.ConservativeGC.mallocNoSync(ulong, uint, ref ulong, const(TypeInfo)), gc.impl.conservative.gc.mallocTime, gc.impl.conservative.gc.numMallocs, ulong, uint, ulong, const(TypeInfo)).runLocked(ref ulong, ref uint, ref ulong, ref const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21A279: nothrow core.memory.BlkInfo_ gc.impl.conservative.gc.ConservativeGC.qalloc(ulong, uint, const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1E6C5E: gc_qalloc (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1E90CB: _d_newitemT (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1B8D4B: pure nothrow ref @trusted std.array.Appender!(immutable(char)[]).Appender std.array.Appender!(immutable(char)[]).Appender.__ctor(immutable(char)[]) (/usr/include/dlang/dmd/std/array.d:3261)
==3854==    by 0x1B8C0F: pure nothrow @safe std.array.Appender!(immutable(char)[]).Appender std.array.appender!(immutable(char)[]).appender() (/usr/include/dlang/dmd/std/array.d:3886)
==3854==    by 0x1C81AC: pure @safe immutable(char)[] std.format.format!(char, immutable(char)[], immutable(char)[]).format(in char[], immutable(char)[], immutable(char)[]) (/usr/include/dlang/dmd/std/format.d:6642)
==3854==    by 0x1B7E98: void verifier.main(immutable(char)[][]).walk_account_tree(verifier.main(immutable(char)[][]).Account, int) (verifier.d:272)
==3854==  Uninitialised value was created by a stack allocation
==3854==    at 0x1B77FC: void verifier.main(immutable(char)[][]).walk_account_tree(verifier.main(immutable(char)[][]).Account, int) (verifier.d:84)
==3854==
==3854== Conditional jump or move depends on uninitialised value(s)
==3854==    at 0x2249A8: nothrow scope void gc.impl.conservative.gc.Gcx.mark!(false, true).mark(gc.impl.conservative.gc.Gcx.ScanRange!(false).ScanRange) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21F137: nothrow void gc.impl.conservative.gc.Gcx.markParallel(bool) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21E959: nothrow ulong gc.impl.conservative.gc.Gcx.fullcollect(bool) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21CBFC: nothrow void* gc.impl.conservative.gc.Gcx.smallAlloc(ulong, ref ulong, uint, const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x2227C0: nothrow void* gc.impl.conservative.gc.ConservativeGC.runLocked!(gc.impl.conservative.gc.ConservativeGC.mallocNoSync(ulong, uint, ref ulong, const(TypeInfo)), gc.impl.conservative.gc.mallocTime, gc.impl.conservative.gc.numMallocs, ulong, uint, ulong, const(TypeInfo)).runLocked(ref ulong, ref uint, ref ulong, ref const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21A279: nothrow core.memory.BlkInfo_ gc.impl.conservative.gc.ConservativeGC.qalloc(ulong, uint, const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1E6C5E: gc_qalloc (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1E90CB: _d_newitemT (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1B8D4B: pure nothrow ref @trusted std.array.Appender!(immutable(char)[]).Appender std.array.Appender!(immutable(char)[]).Appender.__ctor(immutable(char)[]) (/usr/include/dlang/dmd/std/array.d:3261)
==3854==    by 0x1B8C0F: pure nothrow @safe std.array.Appender!(immutable(char)[]).Appender std.array.appender!(immutable(char)[]).appender() (/usr/include/dlang/dmd/std/array.d:3886)
==3854==    by 0x1C81AC: pure @safe immutable(char)[] std.format.format!(char, immutable(char)[], immutable(char)[]).format(in char[], immutable(char)[], immutable(char)[]) (/usr/include/dlang/dmd/std/format.d:6642)
==3854==    by 0x1B7E98: void verifier.main(immutable(char)[][]).walk_account_tree(verifier.main(immutable(char)[][]).Account, int) (verifier.d:272)
==3854==  Uninitialised value was created by a stack allocation
==3854==    at 0x1B77FC: void verifier.main(immutable(char)[][]).walk_account_tree(verifier.main(immutable(char)[][]).Account, int) (verifier.d:84)
==3854==
==3854== Conditional jump or move depends on uninitialised value(s)
==3854==    at 0x2249B7: nothrow scope void gc.impl.conservative.gc.Gcx.mark!(false, true).mark(gc.impl.conservative.gc.Gcx.ScanRange!(false).ScanRange) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21F137: nothrow void gc.impl.conservative.gc.Gcx.markParallel(bool) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21E959: nothrow ulong gc.impl.conservative.gc.Gcx.fullcollect(bool) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21CBFC: nothrow void* gc.impl.conservative.gc.Gcx.smallAlloc(ulong, ref ulong, uint, const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x2227C0: nothrow void* gc.impl.conservative.gc.ConservativeGC.runLocked!(gc.impl.conservative.gc.ConservativeGC.mallocNoSync(ulong, uint, ref ulong, const(TypeInfo)), gc.impl.conservative.gc.mallocTime, gc.impl.conservative.gc.numMallocs, ulong, uint, ulong, const(TypeInfo)).runLocked(ref ulong, ref uint, ref ulong, ref const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21A279: nothrow core.memory.BlkInfo_ gc.impl.conservative.gc.ConservativeGC.qalloc(ulong, uint, const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1E6C5E: gc_qalloc (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1E90CB: _d_newitemT (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1B8D4B: pure nothrow ref @trusted std.array.Appender!(immutable(char)[]).Appender std.array.Appender!(immutable(char)[]).Appender.__ctor(immutable(char)[]) (/usr/include/dlang/dmd/std/array.d:3261)
==3854==    by 0x1B8C0F: pure nothrow @safe std.array.Appender!(immutable(char)[]).Appender std.array.appender!(immutable(char)[]).appender() (/usr/include/dlang/dmd/std/array.d:3886)
==3854==    by 0x1C81AC: pure @safe immutable(char)[] std.format.format!(char, immutable(char)[], immutable(char)[]).format(in char[], immutable(char)[], immutable(char)[]) (/usr/include/dlang/dmd/std/format.d:6642)
==3854==    by 0x1B7E98: void verifier.main(immutable(char)[][]).walk_account_tree(verifier.main(immutable(char)[][]).Account, int) (verifier.d:272)
==3854==  Uninitialised value was created by a stack allocation
==3854==    at 0x1B77FC: void verifier.main(immutable(char)[][]).walk_account_tree(verifier.main(immutable(char)[][]).Account, int) (verifier.d:84)
==3854==
==3854== Conditional jump or move depends on uninitialised value(s)
==3854==    at 0x2249BE: nothrow scope void gc.impl.conservative.gc.Gcx.mark!(false, true).mark(gc.impl.conservative.gc.Gcx.ScanRange!(false).ScanRange) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21F137: nothrow void gc.impl.conservative.gc.Gcx.markParallel(bool) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21E959: nothrow ulong gc.impl.conservative.gc.Gcx.fullcollect(bool) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21CBFC: nothrow void* gc.impl.conservative.gc.Gcx.smallAlloc(ulong, ref ulong, uint, const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x2227C0: nothrow void* gc.impl.conservative.gc.ConservativeGC.runLocked!(gc.impl.conservative.gc.ConservativeGC.mallocNoSync(ulong, uint, ref ulong, const(TypeInfo)), gc.impl.conservative.gc.mallocTime, gc.impl.conservative.gc.numMallocs, ulong, uint, ulong, const(TypeInfo)).runLocked(ref ulong, ref uint, ref ulong, ref const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21A279: nothrow core.memory.BlkInfo_ gc.impl.conservative.gc.ConservativeGC.qalloc(ulong, uint, const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1E6C5E: gc_qalloc (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1E90CB: _d_newitemT (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1B8D4B: pure nothrow ref @trusted std.array.Appender!(immutable(char)[]).Appender std.array.Appender!(immutable(char)[]).Appender.__ctor(immutable(char)[]) (/usr/include/dlang/dmd/std/array.d:3261)
==3854==    by 0x1B8C0F: pure nothrow @safe std.array.Appender!(immutable(char)[]).Appender std.array.appender!(immutable(char)[]).appender() (/usr/include/dlang/dmd/std/array.d:3886)
==3854==    by 0x1C81AC: pure @safe immutable(char)[] std.format.format!(char, immutable(char)[], immutable(char)[]).format(in char[], immutable(char)[], immutable(char)[]) (/usr/include/dlang/dmd/std/format.d:6642)
==3854==    by 0x1B7E98: void verifier.main(immutable(char)[][]).walk_account_tree(verifier.main(immutable(char)[][]).Account, int) (verifier.d:272)
==3854==  Uninitialised value was created by a stack allocation
==3854==    at 0x1B77FC: void verifier.main(immutable(char)[][]).walk_account_tree(verifier.main(immutable(char)[][]).Account, int) (verifier.d:84)
==3854==
==3854== Use of uninitialised value of size 8
==3854==    at 0x224A0A: nothrow scope void gc.impl.conservative.gc.Gcx.mark!(false, true).mark(gc.impl.conservative.gc.Gcx.ScanRange!(false).ScanRange) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21F137: nothrow void gc.impl.conservative.gc.Gcx.markParallel(bool) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21E959: nothrow ulong gc.impl.conservative.gc.Gcx.fullcollect(bool) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21CBFC: nothrow void* gc.impl.conservative.gc.Gcx.smallAlloc(ulong, ref ulong, uint, const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x2227C0: nothrow void* gc.impl.conservative.gc.ConservativeGC.runLocked!(gc.impl.conservative.gc.ConservativeGC.mallocNoSync(ulong, uint, ref ulong, const(TypeInfo)), gc.impl.conservative.gc.mallocTime, gc.impl.conservative.gc.numMallocs, ulong, uint, ulong, const(TypeInfo)).runLocked(ref ulong, ref uint, ref ulong, ref const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21A279: nothrow core.memory.BlkInfo_ gc.impl.conservative.gc.ConservativeGC.qalloc(ulong, uint, const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1E6C5E: gc_qalloc (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1E90CB: _d_newitemT (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1B8D4B: pure nothrow ref @trusted std.array.Appender!(immutable(char)[]).Appender std.array.Appender!(immutable(char)[]).Appender.__ctor(immutable(char)[]) (/usr/include/dlang/dmd/std/array.d:3261)
==3854==    b

October 22, 2020
Here's the rest of it:

y 0x1B8C0F: pure nothrow @safe std.array.Appender!(immutable(char)[]).Appender std.array.appender!(immutable(char)[]).appender() (/usr/include/dlang/dmd/std/array.d:3886)
==3854==    by 0x1C81AC: pure @safe immutable(char)[] std.format.format!(char, immutable(char)[], immutable(char)[]).format(in char[], immutable(char)[], immutable(char)[]) (/usr/include/dlang/dmd/std/format.d:6642)
==3854==    by 0x1B7E98: void verifier.main(immutable(char)[][]).walk_account_tree(verifier.main(immutable(char)[][]).Account, int) (verifier.d:272)
==3854==  Uninitialised value was created by a stack allocation
==3854==    at 0x1B77FC: void verifier.main(immutable(char)[][]).walk_account_tree(verifier.main(immutable(char)[][]).Account, int) (verifier.d:84)
==3854==
==3854== Use of uninitialised value of size 8
==3854==    at 0x224A4F: nothrow scope void gc.impl.conservative.gc.Gcx.mark!(false, true).mark(gc.impl.conservative.gc.Gcx.ScanRange!(false).ScanRange) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21F137: nothrow void gc.impl.conservative.gc.Gcx.markParallel(bool) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21E959: nothrow ulong gc.impl.conservative.gc.Gcx.fullcollect(bool) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21CBFC: nothrow void* gc.impl.conservative.gc.Gcx.smallAlloc(ulong, ref ulong, uint, const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x2227C0: nothrow void* gc.impl.conservative.gc.ConservativeGC.runLocked!(gc.impl.conservative.gc.ConservativeGC.mallocNoSync(ulong, uint, ref ulong, const(TypeInfo)), gc.impl.conservative.gc.mallocTime, gc.impl.conservative.gc.numMallocs, ulong, uint, ulong, const(TypeInfo)).runLocked(ref ulong, ref uint, ref ulong, ref const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21A279: nothrow core.memory.BlkInfo_ gc.impl.conservative.gc.ConservativeGC.qalloc(ulong, uint, const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1E6C5E: gc_qalloc (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1E90CB: _d_newitemT (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1B8D4B: pure nothrow ref @trusted std.array.Appender!(immutable(char)[]).Appender std.array.Appender!(immutable(char)[]).Appender.__ctor(immutable(char)[]) (/usr/include/dlang/dmd/std/array.d:3261)
==3854==    by 0x1B8C0F: pure nothrow @safe std.array.Appender!(immutable(char)[]).Appender std.array.appender!(immutable(char)[]).appender() (/usr/include/dlang/dmd/std/array.d:3886)
==3854==    by 0x1C81AC: pure @safe immutable(char)[] std.format.format!(char, immutable(char)[], immutable(char)[]).format(in char[], immutable(char)[], immutable(char)[]) (/usr/include/dlang/dmd/std/format.d:6642)
==3854==    by 0x1B7E98: void verifier.main(immutable(char)[][]).walk_account_tree(verifier.main(immutable(char)[][]).Account, int) (verifier.d:272)
==3854==  Uninitialised value was created by a stack allocation
==3854==    at 0x1B77FC: void verifier.main(immutable(char)[][]).walk_account_tree(verifier.main(immutable(char)[][]).Account, int) (verifier.d:84)
==3854==
==3854== Use of uninitialised value of size 8
==3854==    at 0x23C1CB: nothrow @nogc ulong gc.bits.GCBits.setLocked(ulong) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x224A6C: nothrow scope void gc.impl.conservative.gc.Gcx.mark!(false, true).mark(gc.impl.conservative.gc.Gcx.ScanRange!(false).ScanRange) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21F137: nothrow void gc.impl.conservative.gc.Gcx.markParallel(bool) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21E959: nothrow ulong gc.impl.conservative.gc.Gcx.fullcollect(bool) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21CBFC: nothrow void* gc.impl.conservative.gc.Gcx.smallAlloc(ulong, ref ulong, uint, const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x2227C0: nothrow void* gc.impl.conservative.gc.ConservativeGC.runLocked!(gc.impl.conservative.gc.ConservativeGC.mallocNoSync(ulong, uint, ref ulong, const(TypeInfo)), gc.impl.conservative.gc.mallocTime, gc.impl.conservative.gc.numMallocs, ulong, uint, ulong, const(TypeInfo)).runLocked(ref ulong, ref uint, ref ulong, ref const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21A279: nothrow core.memory.BlkInfo_ gc.impl.conservative.gc.ConservativeGC.qalloc(ulong, uint, const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1E6C5E: gc_qalloc (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1E90CB: _d_newitemT (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1B8D4B: pure nothrow ref @trusted std.array.Appender!(immutable(char)[]).Appender std.array.Appender!(immutable(char)[]).Appender.__ctor(immutable(char)[]) (/usr/include/dlang/dmd/std/array.d:3261)
==3854==    by 0x1B8C0F: pure nothrow @safe std.array.Appender!(immutable(char)[]).Appender std.array.appender!(immutable(char)[]).appender() (/usr/include/dlang/dmd/std/array.d:3886)
==3854==    by 0x1C81AC: pure @safe immutable(char)[] std.format.format!(char, immutable(char)[], immutable(char)[]).format(in char[], immutable(char)[], immutable(char)[]) (/usr/include/dlang/dmd/std/format.d:6642)
==3854==  Uninitialised value was created by a stack allocation
==3854==    at 0x1B77FC: void verifier.main(immutable(char)[][]).walk_account_tree(verifier.main(immutable(char)[][]).Account, int) (verifier.d:84)
==3854==
==3854== Use of uninitialised value of size 8
==3854==    at 0x224A8D: nothrow scope void gc.impl.conservative.gc.Gcx.mark!(false, true).mark(gc.impl.conservative.gc.Gcx.ScanRange!(false).ScanRange) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21F137: nothrow void gc.impl.conservative.gc.Gcx.markParallel(bool) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21E959: nothrow ulong gc.impl.conservative.gc.Gcx.fullcollect(bool) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21CBFC: nothrow void* gc.impl.conservative.gc.Gcx.smallAlloc(ulong, ref ulong, uint, const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x2227C0: nothrow void* gc.impl.conservative.gc.ConservativeGC.runLocked!(gc.impl.conservative.gc.ConservativeGC.mallocNoSync(ulong, uint, ref ulong, const(TypeInfo)), gc.impl.conservative.gc.mallocTime, gc.impl.conservative.gc.numMallocs, ulong, uint, ulong, const(TypeInfo)).runLocked(ref ulong, ref uint, ref ulong, ref const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21A279: nothrow core.memory.BlkInfo_ gc.impl.conservative.gc.ConservativeGC.qalloc(ulong, uint, const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1E6C5E: gc_qalloc (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1E90CB: _d_newitemT (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1B8D4B: pure nothrow ref @trusted std.array.Appender!(immutable(char)[]).Appender std.array.Appender!(immutable(char)[]).Appender.__ctor(immutable(char)[]) (/usr/include/dlang/dmd/std/array.d:3261)
==3854==    by 0x1B8C0F: pure nothrow @safe std.array.Appender!(immutable(char)[]).Appender std.array.appender!(immutable(char)[]).appender() (/usr/include/dlang/dmd/std/array.d:3886)
==3854==    by 0x1C81AC: pure @safe immutable(char)[] std.format.format!(char, immutable(char)[], immutable(char)[]).format(in char[], immutable(char)[], immutable(char)[]) (/usr/include/dlang/dmd/std/format.d:6642)
==3854==    by 0x1B7E98: void verifier.main(immutable(char)[][]).walk_account_tree(verifier.main(immutable(char)[][]).Account, int) (verifier.d:272)
==3854==  Uninitialised value was created by a stack allocation
==3854==    at 0x1B77FC: void verifier.main(immutable(char)[][]).walk_account_tree(verifier.main(immutable(char)[][]).Account, int) (verifier.d:84)
==3854==
==3854== Use of uninitialised value of size 8
==3854==    at 0x224987: nothrow scope void gc.impl.conservative.gc.Gcx.mark!(false, true).mark(gc.impl.conservative.gc.Gcx.ScanRange!(false).ScanRange) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21F137: nothrow void gc.impl.conservative.gc.Gcx.markParallel(bool) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21E959: nothrow ulong gc.impl.conservative.gc.Gcx.fullcollect(bool) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21CBFC: nothrow void* gc.impl.conservative.gc.Gcx.smallAlloc(ulong, ref ulong, uint, const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x2227C0: nothrow void* gc.impl.conservative.gc.ConservativeGC.runLocked!(gc.impl.conservative.gc.ConservativeGC.mallocNoSync(ulong, uint, ref ulong, const(TypeInfo)), gc.impl.conservative.gc.mallocTime, gc.impl.conservative.gc.numMallocs, ulong, uint, ulong, const(TypeInfo)).runLocked(ref ulong, ref uint, ref ulong, ref const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21A279: nothrow core.memory.BlkInfo_ gc.impl.conservative.gc.ConservativeGC.qalloc(ulong, uint, const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1E6C5E: gc_qalloc (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1E90CB: _d_newitemT (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1B8D4B: pure nothrow ref @trusted std.array.Appender!(immutable(char)[]).Appender std.array.Appender!(immutable(char)[]).Appender.__ctor(immutable(char)[]) (/usr/include/dlang/dmd/std/array.d:3261)
==3854==    by 0x1B8C0F: pure nothrow @safe std.array.Appender!(immutable(char)[]).Appender std.array.appender!(immutable(char)[]).appender() (/usr/include/dlang/dmd/std/array.d:3886)
==3854==    by 0x1C81AC: pure @safe immutable(char)[] std.format.format!(char, immutable(char)[], immutable(char)[]).format(in char[], immutable(char)[], immutable(char)[]) (/usr/include/dlang/dmd/std/format.d:6642)
==3854==    by 0x1B7E98: void verifier.main(immutable(char)[][]).walk_account_tree(verifier.main(immutable(char)[][]).Account, int) (verifier.d:272)
==3854==  Uninitialised value was created by a stack allocation
==3854==    at 0x1B77FC: void verifier.main(immutable(char)[][]).walk_account_tree(verifier.main(immutable(char)[][]).Account, int) (verifier.d:84)
==3854==
==3854== Conditional jump or move depends on uninitialised value(s)
==3854==    at 0x224C56: nothrow scope void gc.impl.conservative.gc.Gcx.mark!(false, true).mark(gc.impl.conservative.gc.Gcx.ScanRange!(false).ScanRange) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21F137: nothrow void gc.impl.conservative.gc.Gcx.markParallel(bool) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21E959: nothrow ulong gc.impl.conservative.gc.Gcx.fullcollect(bool) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21CBFC: nothrow void* gc.impl.conservative.gc.Gcx.smallAlloc(ulong, ref ulong, uint, const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x2227C0: nothrow void* gc.impl.conservative.gc.ConservativeGC.runLocked!(gc.impl.conservative.gc.ConservativeGC.mallocNoSync(ulong, uint, ref ulong, const(TypeInfo)), gc.impl.conservative.gc.mallocTime, gc.impl.conservative.gc.numMallocs, ulong, uint, ulong, const(TypeInfo)).runLocked(ref ulong, ref uint, ref ulong, ref const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21A279: nothrow core.memory.BlkInfo_ gc.impl.conservative.gc.ConservativeGC.qalloc(ulong, uint, const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1E6C5E: gc_qalloc (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1E90CB: _d_newitemT (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1B8D4B: pure nothrow ref @trusted std.array.Appender!(immutable(char)[]).Appender std.array.Appender!(immutable(char)[]).Appender.__ctor(immutable(char)[]) (/usr/include/dlang/dmd/std/array.d:3261)
==3854==    by 0x1B8C0F: pure nothrow @safe std.array.Appender!(immutable(char)[]).Appender std.array.appender!(immutable(char)[]).appender() (/usr/include/dlang/dmd/std/array.d:3886)
==3854==    by 0x1C81AC: pure @safe immutable(char)[] std.format.format!(char, immutable(char)[], immutable(char)[]).format(in char[], immutable(char)[], immutable(char)[]) (/usr/include/dlang/dmd/std/format.d:6642)
==3854==    by 0x1B7E98: void verifier.main(immutable(char)[][]).walk_account_tree(verifier.main(immutable(char)[][]).Account, int) (verifier.d:272)
==3854==  Uninitialised value was created by a stack allocation
==3854==    at 0x1B77FC: void verifier.main(immutable(char)[][]).walk_account_tree(verifier.main(immutable(char)[][]).Account, int) (verifier.d:84)
==3854==
 requires a link to a commodity but doesn't have one.
A commodity with the same name as the account does exist. The account will be linked to it.
 [snip]
 ==3854== Thread 4:
==3854== Conditional jump or move depends on uninitialised value(s)
==3854==    at 0x224AF4: nothrow scope void gc.impl.conservative.gc.Gcx.mark!(false, true).mark(gc.impl.conservative.gc.Gcx.ScanRange!(false).ScanRange) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x225007: nothrow void gc.impl.conservative.gc.Gcx.pullFromScanStackImpl!(false).pullFromScanStackImpl() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21F645: nothrow void gc.impl.conservative.gc.Gcx.scanBackground() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x23C0D2: extern (C) nothrow void* core.thread.osthread.createLowLevelThread(void delegate() nothrow, uint, void delegate() nothrow).thread_lowlevelEntry(void*) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x49B03E8: start_thread (in /usr/lib/libpthread-2.32.so)
==3854==    by 0x4C3C292: clone (in /usr/lib/libc-2.32.so)
==3854==  Uninitialised value was created by a stack allocation
==3854==    at 0x1B77F8: void verifier.main(immutable(char)[][]).walk_account_tree(verifier.main(immutable(char)[][]).Account, int) (verifier.d:84)
==3854==
==3854== Use of uninitialised value of size 8
==3854==    at 0x23C1CB: nothrow @nogc ulong gc.bits.GCBits.setLocked(ulong) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x224B39: nothrow scope void gc.impl.conservative.gc.Gcx.mark!(false, true).mark(gc.impl.conservative.gc.Gcx.ScanRange!(false).ScanRange) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x225007: nothrow void gc.impl.conservative.gc.Gcx.pullFromScanStackImpl!(false).pullFromScanStackImpl() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21F645: nothrow void gc.impl.conservative.gc.Gcx.scanBackground() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x23C0D2: extern (C) nothrow void* core.thread.osthread.createLowLevelThread(void delegate() nothrow, uint, void delegate() nothrow).thread_lowlevelEntry(void*) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x49B03E8: start_thread (in /usr/lib/libpthread-2.32.so)
==3854==    by 0x4C3C292: clone (in /usr/lib/libc-2.32.so)
==3854==  Uninitialised value was created by a stack allocation
==3854==    at 0x1B77F8: void verifier.main(immutable(char)[][]).walk_account_tree(verifier.main(immutable(char)[][]).Account, int) (verifier.d:84)
==3854==
==3854== Conditional jump or move depends on uninitialised value(s)
==3854==    at 0x224B3D: nothrow scope void gc.impl.conservative.gc.Gcx.mark!(false, true).mark(gc.impl.conservative.gc.Gcx.ScanRange!(false).ScanRange) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x225007: nothrow void gc.impl.conservative.gc.Gcx.pullFromScanStackImpl!(false).pullFromScanStackImpl() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21F645: nothrow void gc.impl.conservative.gc.Gcx.scanBackground() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x23C0D2: extern (C) nothrow void* core.thread.osthread.createLowLevelThread(void delegate() nothrow, uint, void delegate() nothrow).thread_lowlevelEntry(void*) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x49B03E8: start_thread (in /usr/lib/libpthread-2.32.so)
==3854==    by 0x4C3C292: clone (in /usr/lib/libc-2.32.so)
==3854==  Uninitialised value was created by a stack allocation
==3854==    at 0x1B77F8: void verifier.main(immutable(char)[][]).walk_account_tree(verifier.main(immutable(char)[][]).Account, int) (verifier.d:84)
==3854==
==3854== Use of uninitialised value of size 8
==3854==    at 0x224B5A: nothrow scope void gc.impl.conservative.gc.Gcx.mark!(false, true).mark(gc.impl.conservative.gc.Gcx.ScanRange!(false).ScanRange) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x225007: nothrow void gc.impl.conservative.gc.Gcx.pullFromScanStackImpl!(false).pullFromScanStackImpl() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21F645: nothrow void gc.impl.conservative.gc.Gcx.scanBackground() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x23C0D2: extern (C) nothrow void* core.thread.osthread.createLowLevelThread(void delegate() nothrow, uint, void delegate() nothrow).thread_lowlevelEntry(void*) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x49B03E8: start_thread (in /usr/lib/libpthread-2.32.so)
==3854==    by 0x4C3C292: clone (in /usr/lib/libc-2.32.so)
==3854==  Uninitialised value was created by a stack allocation
==3854==    at 0x1B77F8: void verifier.main(immutable(char)[][]).walk_account_tree(verifier.main(immutable(char)[][]).Account, int) (verifier.d:84)
==3854==
==3854== Conditional jump or move depends on uninitialised value(s)
==3854==    at 0x224B67: nothrow scope void gc.impl.conservative.gc.Gcx.mark!(false, true).mark(gc.impl.conservative.gc.Gcx.ScanRange!(false).ScanRange) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x225007: nothrow void gc.impl.conservative.gc.Gcx.pullFromScanStackImpl!(false).pullFromScanStackImpl() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21F645: nothrow void gc.impl.conservative.gc.Gcx.scanBackground() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x23C0D2: extern (C) nothrow void* core.thread.osthread.createLowLevelThread(void delegate() nothrow, uint, void delegate() nothrow).thread_lowlevelEntry(void*) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x49B03E8: start_thread (in /usr/lib/libpthread-2.32.so)
==3854==    by 0x4C3C292: clone (in /usr/lib/libc-2.32.so)
==3854==  Uninitialised value was created by a stack allocation
==3854==    at 0x1B77F8: void verifier.main(immutable(char)[][]).walk_account_tree(verifier.main(immutable(char)[][]).Account, int) (verifier.d:84)
==3854==
==3854== Use of uninitialised value of size 8
==3854==    at 0x224B75: nothrow scope void gc.impl.conservative.gc.Gcx.mark!(false, true).mark(gc.impl.conservative.gc.Gcx.ScanRange!(false).ScanRange) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x225007: nothrow void gc.impl.conservative.gc.Gcx.pullFromScanStackImpl!(false).pullFromScanStackImpl() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21F645: nothrow void gc.impl.conservative.gc.Gcx.scanBackground() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x23C0D2: extern (C) nothrow void* core.thread.osthread.createLowLevelThread(void delegate() nothrow, uint, void delegate() nothrow).thread_lowlevelEntry(void*) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x49B03E8: start_thread (in /usr/lib/libpthread-2.32.so)
==3854==    by 0x4C3C292: clone (in /usr/lib/libc-2.32.so)
==3854==  Uninitialised value was created by a stack allocation
==3854==    at 0x1B77F8: void verifier.main(immutable(char)[][]).walk_account_tree(verifier.main(immutable(char)[][]).Account, int) (verifier.d:84)
==3854==
==3854== Thread 1:
==3854== Conditional jump or move depends on uninitialised value(s)
==3854==    at 0x21DA9C: nothrow ulong gc.impl.conservative.gc.Gcx.sweep() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21EB9F: nothrow ulong gc.impl.conservative.gc.Gcx.fullcollect(bool) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21CBFC: nothrow void* gc.impl.conservative.gc.Gcx.smallAlloc(ulong, ref ulong, uint, const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x2227C0: nothrow void* gc.impl.conservative.gc.ConservativeGC.runLocked!(gc.impl.conservative.gc.ConservativeGC.mallocNoSync(ulong, uint, ref ulong, const(TypeInfo)), gc.impl.conservative.gc.mallocTime, gc.impl.conservative.gc.numMallocs, ulong, uint, ulong, const(TypeInfo)).runLocked(ref ulong, ref uint, ref ulong, ref const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x21A279: nothrow core.memory.BlkInfo_ gc.impl.conservative.gc.ConservativeGC.qalloc(ulong, uint, const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1E6C5E: gc_qalloc (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1E6446: pure nothrow core.memory.BlkInfo_ core.memory.GC.qalloc(ulong, uint, const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1B90AF: pure nothrow @trusted core.memory.BlkInfo_ std.array.Appender!(immutable(char)[]).Appender.ensureAddable(ulong).__lambda3() (/usr/include/dlang/dmd/std/array.d:3386)
==3854==    by 0x1B8FCD: pure nothrow @safe void std.array.Appender!(immutable(char)[]).Appender.ensureAddable(ulong) (/usr/include/dlang/dmd/std/array.d:3386)
==3854==    by 0x1BD1E6: pure nothrow @safe char[] std.array.Appender!(immutable(char)[]).Appender.put!(immutable(char)[]).put(immutable(char)[]).bigDataFun(ulong) (/usr/include/dlang/dmd/std/array.d:3488)
==3854==    by 0x1BD0D4: pure nothrow @safe void std.array.Appender!(immutable(char)[]).Appender.put!(immutable(char)[]).put(immutable(char)[]) (/usr/include/dlang/dmd/std/array.d:3491)
==3854==    by 0x1C3B92: pure nothrow @safe void std.range.primitives.doPut!(std.array.Appender!(immutable(char)[]).Appender, immutable(char)[]).doPut(ref std.array.Appender!(immutable(char)[]).Appender, ref immutable(char)[]) (/usr/include/dlang/dmd/std/range/primitives.d:277)
==3854==  Uninitialised value was created by a stack allocation
==3854==    at 0x1B77F8: void verifier.main(immutable(char)[][]).walk_account_tree(verifier.main(immutable(char)[][]).Account, int) (verifier.d:84)
==3854==
but doesn't have one.
A commodity with the same name as the account does exist. The account will be linked to it.
 requires a link to a commodity but doesn't have one.
[snip]
==3854==
==3854== HEAP SUMMARY:
==3854==     in use at exit: 2,380,288 bytes in 2,013 blocks
==3854==   total heap usage: 339,984 allocs, 337,971 frees, 439,341,276 bytes allocated
==3854==
==3854== 16 bytes in 1 blocks are definitely lost in loss record 21 of 171
==3854==    at 0x483A77F: malloc (vg_replace_malloc.c:307)
==3854==    by 0x208B1B: nothrow @nogc void* rt.tlsgc.init() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x207181: thread_init (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1FEC3B: rt_init (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1E76DB: void rt.dmain2._d_run_main2(char[][], ulong, extern (C) int function(char[][])*).runAll() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1E7678: void rt.dmain2._d_run_main2(char[][], ulong, extern (C) int function(char[][])*).tryExec(scope void delegate()) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1E75E1: _d_run_main2 (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1E7359: _d_run_main (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1B8A89: main (/usr/include/dlang/dmd/core/internal/entrypoint.d:29)
==3854==
==3854== 32 bytes in 1 blocks are possibly lost in loss record 33 of 171
==3854==    at 0x483A77F: malloc (vg_replace_malloc.c:307)
==3854==    by 0x2195E5: core.gc.gcinterface.GC gc.impl.conservative.gc.initialize() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x20CF7C: core.gc.gcinterface.GC core.gc.registry.createGCInstance(immutable(char)[]) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x2074E2: gc_init_nothrow (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1FDA7F: nothrow void* gc.impl.proto.gc.ProtoGC.malloc(ulong, uint, const(TypeInfo)) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1E6C1A: gc_malloc (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1E8514: _d_allocmemory (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1B6A4F: _Dmain (verifier.d:8)
==3854==    by 0x1E77CA: void rt.dmain2._d_run_main2(char[][], ulong, extern (C) int function(char[][])*).runAll().__lambda1() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1E7678: void rt.dmain2._d_run_main2(char[][], ulong, extern (C) int function(char[][])*).tryExec(scope void delegate()) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1E7752: void rt.dmain2._d_run_main2(char[][], ulong, extern (C) int function(char[][])*).runAll() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1E7678: void rt.dmain2._d_run_main2(char[][], ulong, extern (C) int function(char[][])*).tryExec(scope void delegate()) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==
==3854== 2,380,056 (768 direct, 2,379,288 indirect) bytes in 1 blocks are definitely lost in loss record 171 of 171
==3854==    at 0x483A77F: malloc (vg_replace_malloc.c:307)
==3854==    by 0x4905F13: ??? (in /usr/lib/libsqlite3.so.0.8.6)
==3854==    by 0x4905489: sqlite3Malloc (in /usr/lib/libsqlite3.so.0.8.6)
==3854==    by 0x490599A: sqlite3MallocZero (in /usr/lib/libsqlite3.so.0.8.6)
==3854==    by 0x490454E: ??? (in /usr/lib/libsqlite3.so.0.8.6)
==3854==    by 0x1D77FA: void* lib.open_db(immutable(char)[]) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1B6ACB: _Dmain (verifier.d:33)
==3854==    by 0x1E77CA: void rt.dmain2._d_run_main2(char[][], ulong, extern (C) int function(char[][])*).runAll().__lambda1() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1E7678: void rt.dmain2._d_run_main2(char[][], ulong, extern (C) int function(char[][])*).tryExec(scope void delegate()) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1E7752: void rt.dmain2._d_run_main2(char[][], ulong, extern (C) int function(char[][])*).runAll() (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1E7678: void rt.dmain2._d_run_main2(char[][], ulong, extern (C) int function(char[][])*).tryExec(scope void delegate()) (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==    by 0x1E75E1: _d_run_main2 (in /home/dca/Software/newcash_d/verifier/verifier)
==3854==
==3854== LEAK SUMMARY:
==3854==    definitely lost: 784 bytes in 2 blocks
==3854==    indirectly lost: 2,379,288 bytes in 2,005 blocks
==3854==      possibly lost: 32 bytes in 1 blocks
==3854==    still reachable: 184 bytes in 5 blocks
==3854==         suppressed: 0 bytes in 0 blocks
==3854== Reachable blocks (those to which a pointer was found) are not shown.
==3854== To see them, rerun with: --leak-check=full --show-leak-kinds=all
==3854==
==3854== For lists of detected and suppressed errors, rerun with: -s
==3854== ERROR SUMMARY: 3213 errors from 33 contexts (suppressed: 0 from 0)