Hacker News new | ask | show | jobs
by WalterBright 1917 days ago
Doing what D does to detect references to expired stack frames would require some restructuring of C++'s semantics, which seems unlikely. For example, D can detect this error:

    @safe:

    int* f(int* p) { return p; }

    int* g() { int i; return f(&i); }
Compile with:

    dmd test -dip1000
and the result:

    Error: reference to local variable i assigned to non-scope parameter p calling test.f
1 comments

At -O2 or above, gcc emits Wreturn-local-addr.
Yep, ‘-O2 or above’ we used to compile our UTs without optimizations because otherwise it takes too long, but now we have an additional(less frequent) CI job for UT with optimizations to benefit from these improved error detection.
Within a single compilation unit, and only in this most trivial case.
Here's an example of a much more complex case that is detected:

https://issues.dlang.org/show_bug.cgi?id=21745

Yes, sorry if my comment isn't clear. D is very capable in this regard. While gcc with C/C++ code will spot a few trivial cases... including the one in the example above.