[Dlang-internal] DIP1000 discussion and testing

Walter Bright via Dlang-internal dlang-internal at puremagic.com
Sat Dec 17 23:47:40 PST 2016


On 12/17/2016 7:38 AM, Mathias Lang wrote:
> int* escape () @safe
> {
>     int i;
>     Foo f;
>     f.v = &i;
>     return f.foo;
> }
>
> struct Foo
> {
>     int* v;
>     int* foo () @safe { return this.v; }
> }

Rewriting to the equivalent:

```
int* escape() @safe
{
     int i;
     Foo f;
     f.v = &i;
     return foo(g);  // Error: scope variable f assigned to non-scope
                     // parameter g calling bug.foo
}

struct Foo
{
     int* v;
}

int* foo(ref Foo g) @safe { return g.v; }
```

So the trouble here is dmd not recognizing that f.foo() is the same as foo(f).


More information about the Dlang-internal mailing list