https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88462
--- Comment #4 from Iain Buclaw <ibuclaw at gdcproject dot org> ---
Stepping through the backtrace, I see the following at Thread.initLocks
(core/thread.d around line 1719).
---
__gshared align(Mutex.alignof) void[__traits(classInstanceSize, Mutex)][2]
_locks;
static void initLocks()
{
foreach (ref lock; _locks)
{
lock[] = typeid(Mutex).initializer[];
(cast(Mutex)lock.ptr).__ctor();
}
}
---
So there are two things. Firstly, the object instance is type punned from a
void[N] array. Secondly it is aligned to pointer size, not the alignment of
the underlying record type.
So I'm certain that the problem will be fixed if `align(Mutex.alignof)` is
replaced with `align(8)`.