[Issue 18738] [scope] scope delegates can be escaped via closure

d-bugmail at puremagic.com d-bugmail at puremagic.com
Tue Dec 6 06:03:21 UTC 2022


https://issues.dlang.org/show_bug.cgi?id=18738

andy.pj.hanson at gmail.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |andy.pj.hanson at gmail.com

--- Comment #2 from andy.pj.hanson at gmail.com ---
I think is a similar bug: 

```
@safe:

import std.stdio : writeln;

void main() {
        int* x = escape();
        writeln("x is ", *x); // x is 1
        *x = 5;
        escape();
        writeln("x is ", *x); // x is 1
}

pure @nogc nothrow:

int* escape() {
        int* res;
        callbackWithPointer([1, 2, 3], (int* i) { res = i; });
        return res;
}

void callbackWithPointer(T)(scope T[] a, scope void delegate(T*) @safe @nogc
pure nothrow f) {
        f(&a[0]);
}
```

In this case a `pure` function `escape` appears to return a pointer to global
state.
`f(&a[0])` probably shouldn't be allowed. The delegate expects a `T*` but gets
a `scope T*`.

--


More information about the Digitalmars-d-bugs mailing list