Thread overview
[Issue 10928] New: Fails to create closures that reference structs with dtor
Aug 30, 2013
Dmitry Olshansky
Aug 30, 2013
Dmitry Olshansky
August 30, 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10928

           Summary: Fails to create closures that reference structs with
                    dtor
           Product: D
           Version: D2
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: blocker
          Priority: P2
         Component: DMD
        AssignedTo: nobody@puremagic.com
        ReportedBy: dmitry.olsh@gmail.com


--- Comment #0 from Dmitry Olshansky <dmitry.olsh@gmail.com> 2013-08-30 07:58:43 PDT ---
To make example real simple:

struct D{
    int x;
    ~this()
    {

    }
}

void foo(D bar)
{
    (){ bar.x++; }();
}

void main()
{
    foo(D.init);
}

Note that even though there is no need for allocating closure at all. Compiler should deal with such cases by tiying the lifetime of dtor-able variables to that of a closure if one is indeed required.

This is critical as std.array.array and other functions started using internal lambdas for trusted blocks making use of any RefCounted range impossible.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
August 30, 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10928



--- Comment #1 from Dmitry Olshansky <dmitry.olsh@gmail.com> 2013-08-30 07:59:13 PDT ---
Error message:
d_test.d(10): Error: variable d_test.foo.bar has scoped destruction, cannot
build closure

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
August 30, 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10928


Joseph Rushton Wakeling <joseph.wakeling@webdrake.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |joseph.wakeling@webdrake.ne
                   |                            |t


--- Comment #2 from Joseph Rushton Wakeling <joseph.wakeling@webdrake.net> 2013-08-30 08:31:42 PDT ---
For reference, an "in-the-wild" example of such an error: http://forum.dlang.org/post/mailman.445.1377370120.1719.digitalmars-d@puremagic.com http://forum.dlang.org/thread/mailman.443.1377369357.1719.digitalmars-d@puremagic.com

This is a concern as it potentially blocks the ability to move forward with necessary redesign work on random number generation in Phobos.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
August 30, 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10928


monarchdodra@gmail.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |monarchdodra@gmail.com


--- Comment #3 from monarchdodra@gmail.com 2013-08-30 08:47:35 PDT ---
(In reply to comment #2)
> For reference, an "in-the-wild" example of such an error: http://forum.dlang.org/post/mailman.445.1377370120.1719.digitalmars-d@puremagic.com http://forum.dlang.org/thread/mailman.443.1377369357.1719.digitalmars-d@puremagic.com
> 
> This is a concern as it potentially blocks the ability to move forward with necessary redesign work on random number generation in Phobos.

Currently, a *workaround* is to avoid lambdas in favor of named:

//----
struct D
{
    int x;
    ~this()
    {

    }
}

void foo(D bar)
{
    void do_it(){ bar.x++; }
    do_it();
}

void main()
{
    foo(D.init);
}
//----

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
September 01, 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10928



--- Comment #4 from github-bugzilla@puremagic.com 2013-09-01 01:13:48 PDT ---
Commits pushed to master at https://github.com/D-Programming-Language/phobos

https://github.com/D-Programming-Language/phobos/commit/8d50d807bed69ee9b339de81ee50f3c105ef3900 sidestep issue 10928

https://github.com/D-Programming-Language/phobos/commit/01a2bdb02e45f61ed3773d40d2aac4dadcb2a767 Merge pull request #1535 from blackwhale/fix-lambda

Sidestep issue 10928

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