http://d.puremagic.com/issues/show_bug.cgi?id=6189
Summary: register content destroyed in function prolog Product: D Version: D2 Platform: x86_64 OS/Version: All Status: NEW Keywords: wrong-code Severity: major Priority: P2 Component: DMD AssignedTo: nob...@puremagic.com ReportedBy: d...@dawgfoto.de --- Comment #0 from d...@dawgfoto.de 2011-06-21 05:52:01 PDT --- struct FPoint { float x, y; } void constructBezier(FPoint p0, FPoint p1, FPoint p2, ref FPoint[3] quad) { quad[0] = p0; quad[1] = FPoint(p1.x, p1.y); quad[$-1] = p2; } void main() { auto p0 = FPoint(0, 0); auto p1 = FPoint(1, 1); auto p2 = FPoint(2, 2); // avoid inline of call FPoint[3] quad; auto f = &constructBezier; f(p0, p1, p2, quad); assert(quad == [p0, p1, p2]); } --- This code will fail if compiled with optimization. The issue is that quad variable is assigned to a register during the function. In the function prolog quad is move from it's parameter register to the target register while another parameter still resides in that register. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------