Should we warn if we detect null derefernces or void value uses ?

Jonathan M Davis via Digitalmars-d digitalmars-d at puremagic.com
Mon Dec 5 02:52:49 PST 2016


On Monday, December 05, 2016 05:03:36 Stefan Koch via Digitalmars-d wrote:
> On Monday, 5 December 2016 at 04:59:01 UTC, ketmar wrote:
> > On Monday, 5 December 2016 at 04:41:55 UTC, Stefan Koch wrote:
> >> Hi Guys,
> >> What is your opinion, should we warn if we unambiguously
> >> detect something that is clearly unwanted ?
> >>
> >> int fn(int y)
> >> {
> >>
> >>   int x = void;
> >>   ++x;
> >>   return x+y;
> >>
> >> }
> >>
> >>  This requires data-flow analysis (The same kind that tells
> >>
> >> you if you are skipping a statement)
> >> And will slow down compilation a little if we enable such a
> >> warning.
> >
> > no need to. if i explicitly wrote `=void` there, i know what i
> > am doing. maybe i want that UB. or something. and i tried to
> > tell the compiler STFU. please, don't make it harder, and don't
> > force me to invent another ways to say STFU.
>
> Even if you want that ub.
> A warning will not halt the compilation.

It will with -w. And even if you build with -wi, it's bad practice to leave
warnings in. So, really, we should _never_ warn about anything where it
would be reasonable for the programmer to not fix whatever is causing the
warning.

That being said, if we're dealing with something that is clearly never okay,
a warning is fine. And I don't know how anyone can claim that doing
something like ++x on a variable that was initialized with null or void is
rasonable. But if such a warning were introduced, it would have to be done
carefully and only used when it was totally certain that what the programmer
was doing was invalid. For instance, taking the address of the variable or
passing it to a function would potentially be perfectly fine, whereas
calling a member function on it when nothing could have possibly given it a
value wouldn't be.

Java sometimes gets annoying with how it requires that you initialize a
variable before you use it, because its detection simply isn't smart enough,
and we don't want to get into a similar boat with D. So, if such detection
really _is_ smart enough, then fine, but it should never have false
positives, or it's making things worse than they are now.

- Jonathan M Davis



More information about the Digitalmars-d mailing list