On Saturday, 1 June 2013 at 21:41:40 UTC, Jonathan M Davis wrote:
They're guaranteed to not introduce any such behavior. They can't possibly make any guarantees if the caller did @system operations and passed a bad pointer to the @safe function. But if all of the functions in the call stack are @safe, and you call an @safe function, then you can't get any memory corruption unless it (or a function that it calls) calls an @trusted function which was incorrectly verified by the programmer who marked it as @trusted.

- Jonathan M Davis

Updated example from above to show how @safe can introduce UB.

import std.stdio;

class A
{
   int[] data;
   ~this()
   {
      writeln(data);
   }
}

void foo(int[] a) @safe
{
   A x = new A;
   x.data = a;
}

void main() @safe
{
   int[4] y;
   foo(y);
}

Reply via email to