On Monday, 31 July 2023 at 14:38:52 UTC, ryuukk_ wrote:
Your problem lies at line 1541

You can use `ddemangle` executable to make mangled names readable, i don't know if it comes with the compiler

```
_platform_memmove
pure nothrow ref @trusted wchar[] core.internal.array.appending._d_arrayappendT!(wchar[], char)._d_arrayappendT(scope return ref wchar[], scope wchar[]) void asm_parse.AsmTransformTemplate!(wchar).__unittest_L1541_C1_1()
asm_parse.__unittest
asm_parse.__unittest
asm_parse.__unittest
asm_parse.__unittest
int core.runtime.runModuleUnitTests().__foreachbody6(object.ModuleInfo*) int rt.minfo.moduleinfos_apply(scope int delegate(immutable(object.ModuleInfo*))).__foreachbody2(ref rt.sections_elf_shared.DSO) int rt.sections_elf_shared.DSO.opApply(scope int delegate(ref rt.sections_elf_shared.DSO)) int rt.minfo.moduleinfos_apply(scope int delegate(immutable(object.ModuleInfo*))) int object.ModuleInfo.opApply(scope int delegate(object.ModuleInfo*))
runModuleUnitTests
void rt.dmain2._d_run_main2(char[][], ulong, extern (C) int function(char[][])*).runAll()
_d_run_main2
_d_run_main
start
```

Thank you all for your help. In the real code I have a struct (object) in the heap but in the unittests I first of all had it in place in the stack, then tried changing to the heap to see if that would fix the problem. That didn’t work. I first ran the struct initialisation routine in each one of the unittests, but I still suspect that the thing is not completely initialised. Maybe I forgot to set something in the init routine and it gets set to a sensible value in subsequent code, but all that code is not running in the unittests. An uninitialised field would be my best guess. I can see the AAarch64 instruction that it dies on and my AAarch64 is non-existent but I’ve done so much asm over the years that I can hazard a guess. It is doing something like p->field and it looks like a read instruction but I’m not sure about the operand ordering as we probably have the stupid ATT asm to deal with. Of course a write instruction is more likely to cause a crash. I could try and work out how to see all the relevant registers, could be p is a null pointer or perhaps just out of range.

Really annoying as that code seems to work perfectly in normal use, and disabling that unittest block restores sanity. I really am going to have to go off and do a lot of reading.

Reply via email to