[Issue 7130] NRVO Bug: Wrong Code With D'tor + Conditional Return

d-bugmail at puremagic.com d-bugmail at puremagic.com
Thu May 10 23:03:52 PDT 2012


http://d.puremagic.com/issues/show_bug.cgi?id=7130


Kenji Hara <k.hara.pg at gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |DUPLICATE


--- Comment #1 from Kenji Hara <k.hara.pg at gmail.com> 2012-05-10 23:05:16 PDT ---
(In reply to comment #0)
> Both D'tors are called and the returned result lives at a different address
> after being returned than before, as expected if not using NRVO.  On the other
> hand, no postblit being called for whichever struct is returned, as expected if
> using NRVO.

The function 'doit' cannot NRVO, because &s1 and &s2 should have different
addresses.

S doIt(int i) {
    S s1;
    S s2;
    printf("s1 lives at %p.\n", &s1);
    printf("s2 lives at %p.\n", &s2);
    return (i == 42) ? s1 : s2;   // postblit should run
}

I'll make this a dup of bug 7516. I have posted more better test code in there.

*** This issue has been marked as a duplicate of issue 7516 ***

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list