https://issues.dlang.org/show_bug.cgi?id=17885
ag0ae...@gmail.com changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |wrong-code CC| |ag0ae...@gmail.com Component|druntime |dmd --- Comment #1 from ag0ae...@gmail.com --- I think this is a wrong-code bug in the compiler. For this D code: ---- struct T { ulong a, b; } T f() { return T(); } void main() { int[T] set; set.remove(f()); } ---- dmd generates this machine code for _Dmain (excerpt): ---- 0x00000000000300ba <+14>: call 0x30090 <_D4test1fFZSQk1T> 0x00000000000300bf <+19>: mov QWORD PTR [rbp-0x8],rax 0x00000000000300c3 <+23>: lea rdx,[rbp-0x8] 0x00000000000300c7 <+27>: lea rsi,[rip+0x238f42] # 0x269010 <_D17TypeInfo_S4test1T6__initZ> 0x00000000000300ce <+34>: mov rdi,QWORD PTR [rbp-0x10] 0x00000000000300d2 <+38>: call 0x303c0 <_aaDelX> ---- Note that after the `f` call, only rax gets copied to the stack. But the other half of the return value is in rdx which is not being copied. Changing component to dmd. --