https://issues.dlang.org/show_bug.cgi?id=18461
[email protected] changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |[email protected] Component|phobos |dmd --- Comment #9 from [email protected] --- This is a (major?) codegen bug in dmd, the joint action of -inline and -release makes the rmdeadass kill the `test_val' definition and fold the argument `p' of the `bt' function into `&test_val': that's right, the variable is gone but the reference to it is still there, leading to the generation of the silly `lea' instruction pointing into the stack. Some more details for the lovers of the gory details: ``` ambiguous lvalue: test_val(0) = 16LL assnod[0]: test_val(0) = 16LL POSS DEAD=0, live=0 dead assignment (test_val(0) = 16LL ) Boutlv elimass el:0x55687ec1d360 cnt=0 = TYuns long long 0x55687ec1d170 0x55687ec1d300 el:0x55687ec1d170 cnt=0 var TYuns long long test_val el:0x55687ec1d300 cnt=0 const TYuns long long 16LL assnod[1]: p(1) = #test_val(0) POSS DEAD=0, live=0 dead assignment (p(1) = #test_val(0)) Boutlv elimass el:0x55687ec1d9f0 cnt=0 = mTYconst|TY* 0x55687ec1d810 0x55687ec1d8d0 el:0x55687ec1d810 cnt=0 var mTYconst|TY* p el:0x55687ec1d8d0 cnt=0 relconst TY* 0+& test_val assnod[2]: bitnum(2) = 4LL POSS DEAD=0, live=0 dead assignment (bitnum(2) = 4LL ) Boutlv elimass el:0x55687ec1dcc0 cnt=0 = TYuns long long 0x55687ec1dba0 0x55687ec1dc60 el:0x55687ec1dba0 cnt=0 var TYuns long long bitnum el:0x55687ec1dc60 cnt=0 const TYuns long long 4LL ``` If I understand correctly what's going on the variables are killed even though they're not dead because they don't escape the block (they're not in Boutlv). --
