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)`.

Reply via email to