[Issue 20956] [DIP1000] @safe defeated by closure capturing ref parameter
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Tue Jan 4 11:52:46 UTC 2022
https://issues.dlang.org/show_bug.cgi?id=20956
Dennis <dkorpel at live.nl> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |dkorpel at live.nl
--- Comment #1 from Dennis <dkorpel at live.nl> ---
Reduced a bit more:
```
@safe:
alias DG = void delegate() @safe;
void main()
{
DG dg = getDg(42);
stompStack();
dg();
}
DG getDg(int val)
{
return forwardDg(val);
}
DG forwardDg(ref int c)
{
return () {assert(c == 42);};
}
void stompStack()
{
int[256] oops = int.max;
}
```
Also, it fails both with or without -dip1000. I think closing over a ref
parameter should be an error (at least in `@safe` code), because it's really
hard for `forwardDg` to create a closure including the stack frame of `getDg`:
it has to be done at runtime, since you can't statically know where the `ref`
parameter came from.
--
More information about the Digitalmars-d-bugs
mailing list