struct XY { union { int x, y; } } struct AHolder { XY aa; void a(XY x) { aa = x; } } struct AB { AHolder aHolder; XY b; void a(XY x) { aHolder.a(x); } } struct Main { AB ab; void setB() { ab.b = XY(); } void f() { ab.a(XY.init); setB(); } } $ dmd -c -inline arst.d Segmentation fault Any of the following semantics-preserving changes will fix it: - Making Main.setB use XY.init instead of XY() - Inlining ab.a(XY.init) into Main.f - Inlining setB() into Main.f - Inlining aHolder.a(x) into AB.a
PATCH: Uninitialized variable causing memory corruption. bug 4036. inline.c, arrayExpressiondoInline(), line 460. --------- if (e) { e = e->doInline(ids); newa->data[i] = (void *)e; } + else + newa->data[i] = 0;
Fixed DMD2.044