safety: null checks
Max Haughton
maxhaton at gmail.com
Mon Nov 23 00:52:59 UTC 2020
On Sunday, 22 November 2020 at 11:52:13 UTC, Dibyendu Majumdar
wrote:
> import core.stdc.stdio : printf;
>
> extern (C++) abstract class A {
> void sayHello();
> }
>
> extern (C++) class B : A {
> override void sayHello() {
> printf("hello\n");
> }
> }
>
> extern (C) void main() {
> //scope b = new B;
> B b;
> assert(b);
> b.sayHello();
> }
>
>
> Above fails because b is null. But why doesn't the compiler say
> so? It seems like a very basic safety check.
Keep in mind that to find a null pointer, you must first invent
the universe. This isn't a point about the halting problem, but
rather than doing static analysis properly is complicated and dmd
is already not particularly well structured.
You can use constant folding to find simple bugs like this,
however, to do it in a clean manner requires a fair amount of
thought to get right. Ideally you'd want to use some kind of
complete design like abstract interpretation, but in reality
you'll end up with @safe (minus the ownership aspects) where
certain special cases are allowed.
More information about the Digitalmars-d
mailing list