On Wed, Sep 09, 2020 at 08:49:01AM +0300, Andriy Gapon wrote: > On 08/09/2020 15:48, Mark Johnston wrote: > > I observed the same thing recently as well: the compiler catches > > uninitialized variables only in simple cases. In my case, any uses of > > goto within the function seemed to silence the warning, even if they > > appeared after the uninitialized reference. > > I am running a kernel build now with this addition (for clang): > CWARNEXTRA+= -Wconditional-uninitialized > -Wno-error-conditional-uninitialized > > It produces a ton of warnings. > Some of them are probably false positives, but some look quite reasonable.
It has a lot of trouble with code patterns of the form: for (i = 0; i < 100; i++) { val = foo(); } if (val != 0) /* may be uninitialized!!1 */ bar(); or if (foo == bar) val = baz(); <some other stuff> if (foo == bar && val == 3) <some stuff> The second example makes some sense to me since it's hard to prove that foo == bar will not change between the first and second evaluations. > E.g.: > sys/cam/cam_periph.c:314:19: warning: variable 'p_drv' may be uninitialized > when > used here [-Wconditional-uninitialized] > TAILQ_REMOVE(&(*p_drv)->units, periph, unit_links); > > Indeed, there is a conditional 'goto failure' before a first assignment to > p_drv > and the line is after the label. So, maybe the situation is impossible, but > it > is reasonable to warn about it. > > But the number of false positives (and "possible but impossible" situations) > is > too overwhelming. Yeah. I looked at maybe 30 warnings (out of hundreds) this morning and they were all false positives. KMSAN will provide a new tool for finding such bugs, but they will only be detected at runtime. _______________________________________________ svn-src-all@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"