DMD 2.045 --- import std.stdio; struct B(alias _) { void print() { writeln(&_); } } struct C(alias _) { int i; void print() { writeln(&_); } } int main(string[] args) { int a; auto b = B!(a)(); writeln(&a); b.print(); auto c = C!(a)(); writeln(&a); c.print(); return 0; } --- $ rdmd passByAlias.d B75B5E54 B75B5E54 B75B5E54 804E358 end zsh: segmentation fault rdmd passByAlias.d --- It seems that C having a field messes with what DMD thinks the _ alias refers to.
Fixed in 2.050.
Commit pushed to master at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/c85f088cd88cfc62a40b7406b7203c738a65d39f fix Issue 4162 - pass by alias offset problems