Thread overview | |||||||||
---|---|---|---|---|---|---|---|---|---|
|
May 24, 2008 [Issue 2127] New: inliner turns struct "return *this" from by-value into by-ref | ||||
---|---|---|---|---|
| ||||
http://d.puremagic.com/issues/show_bug.cgi?id=2127 Summary: inliner turns struct "return *this" from by-value into by-ref Product: D Version: 1.030 Platform: PC OS/Version: All Status: NEW Keywords: wrong-code Severity: major Priority: P2 Component: DMD AssignedTo: bugzilla@digitalmars.com ReportedBy: fvbommel@wxs.nl The following code: ----- module evbug; import std.stdio; struct S { int last = 0; S opCall(int i) { writefln("%s %s", last, i); last = i; return *this; } } void main() { S t; t(1)(2); t(3); } ----- should output ===== 0 1 1 2 1 3 ===== (Note that opCall returns a copy of the original struct, so the first and last calls will be passed &t as 'this', but the second is passed a pointer to a copy) With "dmd -run test.d", this all works fine. However, when run with "dmd -inline -run test.d": ===== 0 1 1 2 2 3 ===== (note the last line) The "return *this" seems suddenly to have compiled as a reference return instead of a value return. (This can be verified by making opCall print the address as well; the uninlined version will only report the same address for the first and last call, while the inlined version reports the same address every time) GDC doesn't exhibit this problem, presumably because it uses the GCC inliner. -- |
January 15, 2010 [Issue 2127] inliner turns struct "return *this" from by-value into by-ref | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/issues/show_bug.cgi?id=2127 Don <clugdbug@yahoo.com.au> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |clugdbug@yahoo.com.au Severity|major |critical -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
May 25, 2010 [Issue 2127] inliner turns struct "return *this" from by-value into by-ref (D1 only) | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/issues/show_bug.cgi?id=2127 --- Comment #1 from Brad Roberts <braddr@puremagic.com> 2010-05-25 01:59:48 PDT --- Created an attachment (id=642) tentative fix for this for the d2 branch (might work on d1 as well, untested) This bug exists in the d2 code base as well. This patch fixes the test case and passes the test suite. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
May 25, 2010 [Issue 2127] inliner turns struct "return *this" from by-value into by-ref (D1 only) | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/issues/show_bug.cgi?id=2127 Brad Roberts <braddr@puremagic.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Attachment #642 is|0 |1 obsolete| | --- Comment #2 from Brad Roberts <braddr@puremagic.com> 2010-05-25 03:05:16 PDT --- Created an attachment (id=643) d2 fix, version 2 Oops.. the version I attached previously was an older copy. This is the newer version that moves the changes down from FuncDeclaration::inlineScan to doInline and fixes a problem with the first version. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
May 30, 2010 [Issue 2127] inliner turns struct "return *this" from by-value into by-ref | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/issues/show_bug.cgi?id=2127 Walter Bright <bugzilla@digitalmars.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED CC| |bugzilla@digitalmars.com Resolution| |FIXED --- Comment #3 from Walter Bright <bugzilla@digitalmars.com> 2010-05-30 11:03:31 PDT --- http://www.dsource.org/projects/dmd/changeset/505 -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
Copyright © 1999-2021 by the D Language Foundation