digitalmars.D.bugs - [Issue 1148] New: Problems returning structs from functions
- d-bugmail puremagic.com (86/86) Apr 15 2007 http://d.puremagic.com/issues/show_bug.cgi?id=1148
- d-bugmail puremagic.com (9/9) Apr 20 2007 http://d.puremagic.com/issues/show_bug.cgi?id=1148
http://d.puremagic.com/issues/show_bug.cgi?id=1148 Summary: Problems returning structs from functions Product: D Version: 1.010 Platform: PC OS/Version: Linux Status: NEW Severity: major Priority: P2 Component: DMD AssignedTo: bugzilla digitalmars.com ReportedBy: mtwatkin mtu.edu This issue may be related to issue 997, but it appears to be somewhat different to me. The code at the bottom of this error report is expected to print: Returning <1.000000, 0.000000, 0.000000> Returned: <1.000000, 0.000000, 0.000000> However, the actual result is Returning <1.000000, 0.000000, 0.000000> Returned: <0.000000, 0.000000, 0.000000> if "Vector b = Vector(); return b;" is changed to "return Vector();" in foobar, the code appears to work properly. Depending on the parameters passed to the function, the result changes. For example, if bar is declared "private void bar(uint x, uint y)", and is called from foo with "bar(2, 3)", then it will print: Returning <1.000000, 0.000000, 0.000000> Returned: <0.000000, 1.000000, 0.000000> If the contents of bar are moved into foo, and the call to bar is removed, the code appears to work properly. if the contents of bar are changed to Vector c = foobar(); Vector(); writef("Returned: %s\n", c); then the printed result is nondeterministic. Here is a sample output: Returning <1.000000, 0.000000, 0.000000> Returned: <-1.697432, 0.000000, 0.000000> I am compiling the following code with "dmd -v -debug -g -op -L-lphobos src/main.d" on Ubuntu Linux 6.10 contents of src/main.d -------------------------------------------------------------------- import std.stdio; import std.string; struct Vector { float x, y, z; public static Vector opCall(float x = 0, float y = 0, float z = 0) { Vector v; v.x = x; v.y = y; v.z = z; return v; } public char[] toString() { return format("<%f, %f, %f>", x, y, z); } } class Foo { private Vector v; public this() { v = Vector(1, 0, 0); } public void foo() { bar(); } private void bar() { writef("Returned: %s\n", foobar()); } public Vector foobar() { writef("Returning %s\n", v); return v; Vector b = Vector(); return b; } } void main(char [][] args) { Foo f = new Foo(); f.foo(); } --
Apr 15 2007
http://d.puremagic.com/issues/show_bug.cgi?id=1148 bugzilla digitalmars.com changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |FIXED ------- Comment #1 from bugzilla digitalmars.com 2007-04-20 13:21 ------- Fixed DMD 1.013 --
Apr 20 2007