On 7/13/18 7:22 AM, ketmar wrote:
Piotr Mitana wrote:

This code:

     import std.stdio;

     class X1 {}
     class X2 : X1
     {
    void run() @safe
         {
             writeln("DONE");
         }
     }

     void main() @safe
     {
         X1 x1 = new X1;
         X2 x2 = cast(X2) x1;
         x2.run();
     }

is obviously wrong gets killed by OS's signal. Why is it @safe? I thought @safe should prevent such errors as well.

there is nothing wrong here. dereferencing null reference is completely safe (in terms of result predictability).

To emphasize the point, this is @safe as well:

X2 x2; // = null
x2.run();

D does not consider a segmentation fault due to null dereferencing to be unsafe -- no memory corruption happens.

-Steve

Reply via email to