[Issue 15842] New: struct is being copied when returned directly
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Mon Mar 28 06:18:31 PDT 2016
https://issues.dlang.org/show_bug.cgi?id=15842
Issue ID: 15842
Summary: struct is being copied when returned directly
Product: D
Version: D2
Hardware: x86_64
OS: Linux
Status: NEW
Keywords: wrong-code
Severity: normal
Priority: P1
Component: dmd
Assignee: nobody at puremagic.com
Reporter: ag0aep6g at gmail.com
CC: atila.neves at gmail.com
This is spin-off from issue 15832.
test.d:
----
import std.stdio;
struct S
{
this(int dummy) {writeln(&this);}
}
S f() {return S(0);}
void main()
{
S s = f();
writeln(&s);
}
----
The two `writeln`s print different addresses, so the struct is apparently
constructed in a different location and gets copied on return.
Change `f` to this and they print the same address:
----
S f() {S s = S(0); return s;}
----
I don't know what the ABI says about this, so this behavior may be allowed by
the spec, but it's weird how adding a temporary makes the copy go away.
--
More information about the Digitalmars-d-bugs
mailing list