digitalmars.D.bugs - [Issue 16652] New: returned rvalue gets destroyed before expressions
- via Digitalmars-d-bugs (49/49) Oct 31 2016 https://issues.dlang.org/show_bug.cgi?id=16652
https://issues.dlang.org/show_bug.cgi?id=16652 Issue ID: 16652 Summary: returned rvalue gets destroyed before expressions ends Product: D Version: D2 Hardware: All OS: All Status: NEW Severity: major Priority: P1 Component: dmd Assignee: nobody puremagic.com Reporter: code dawg.eu cat > bug.d << CODE import std.stdio; struct Vector { ubyte[] opSlice() { writeln("opslice"); return buf[]; } ~this() { writeln("dtor"); } ubyte[4] buf; } void bar(ubyte[]) { writeln("bar"); } void main() { bar(Vector()[]); } CODE dmd -inline -run bug --- opslice dtor <- !!! destroyed bar <- stale reference --- The order of evaluation changes when -inline is passed to the compiler. With that the destructor runs before the function call finishes, thus possibly passing a stale reference. Also see https://github.com/rejectedsoftware/vibe.d/pull/1578 and https://github.com/etcimon/botan/issues/23. --
Oct 31 2016