Shouldn't invalid references like this fail at compile time?

Mike Franklin slavo5150 at yahoo.com
Tue Jan 23 02:38:42 UTC 2018


On Tuesday, 23 January 2018 at 02:25:57 UTC, Mike Franklin wrote:

> Due to the aforementioned bugs in my prior posts, I couldn't 
> even make an example to demonstrate in @safe code, so I 
> modified the example slightly in an effort to reproduce the 
> same problem.
>
> import std.stdio;
>
> void main() @safe
> {
>     string foo = "foo";
>     string* ls0;
>     string* p1, p2;
>
>     ls0 = &foo;
>     p1 = ls0;
>     ls0.destroy();
>     p2 = ls0;
>     writeln(p2.length);
> }
>
> Error: program killed by signal 11
>
> https://run.dlang.io/is/ecYAKZ
>

Gah!!! I screwed up that example, and I can't edit the post.  See 
the example here:

import std.stdio;

void main() @safe
{
     string foo = "foo";
     string* ls0;
     string* p1, p2;

     ls0 = &foo;
     p1 = ls0;
     ls0.destroy();
     p2 = ls0;
     writeln(p2.length);
}

Compile with `-dip1000`

Error: program killed by signal 11

https://run.dlang.io/is/6L6zcH

So that's bad.  But it looks like a bug in `-dip1000`, because if 
I compile without `-dip1000`, I get:

onlineapp.d(9): Error: cannot take address of local foo in @safe 
function main

https://run.dlang.io/is/rHpuf1

Mike




More information about the Digitalmars-d mailing list