[cfe-commits] [PATCH] Checking for sometimes-uninitialized variables
Richard Smith
richard at metafoo.co.uk
Thu May 24 19:19:31 PDT 2012
Hi Ted,
Thanks for the comments!
On Thu, May 24, 2012 at 2:33 PM, Ted Kremenek <kremenek at apple.com> wrote:
> Hi Richard,
>
> I very much like this work. I have some nit picky comments, but I'd like
> to first focus on the high-level ones.
>
> First, I'm wondering if this should just be rolled into -Wuninitialized.
> If the false positive rate is low (or none), that would seem to be the
> right thing to do. Otherwise, most users aren't going to benefit from this
> warning unless they know about it. It seems like the whole point of this
> patch is to find cases where something is not unconditionally uninitialized
> but we have much higher confidence in reporting an issue. This patch
> doesn't try to resolve "maybe uninitialized" issues that could be resolved
> if we had better path-sensitivity. Thoughts?
>
I think rolling this into -Wuninitialized is best; I've updated the patch
to work this way. The old -Wuninitialized is still available via
-Wuninitialized -Wno-sometimes-uninitialized, which seems reasonable to me.
> Second, I honestly found the description of the algorithm in the comments
> of getUninitUse() to be (at first) fairly unintuitive. Since the algorithm
> isn't so obvious, actually having an example in the comments would be
> great. After I read the code several times, I figured it out, but it also
> required me working through an example on paper. After that, the comments
> made sense to me.
>
I've added an example and reworded the comment.
> > int x;
> > for (int n = 0; n < size; ++n) { // Redundant "n < size" test.
> > // This is somehow guaranteed to happen for some n.
> > if (f(n) == k) {
> > x = n;
> > break;
> > }
> > }
> > return x;
>
> This is a common source of false positives with the static analyzer, but
> I'd argue that the code should just initialize 'x' to be safe. I can't
> look at this in isolation and immediately tell if this is safe, because it
> requires me making assumptions about size, n, which aren't documented in
> the code.
Some of the code I found with this pattern had genuine uninitialized-use
bugs in it, and the rest of the code seemed clearer when rearranged to
avoid the dead condition.
> More comments in the patch itself:
>
All done.
> Many of the other changes in the patch seem like just nice cleanups, and
> not core to this work. I'd prefer they went in separately so that the key
> algorithmic change is easy to spot in a single (small) patch, but I don't
> want to waste your time with having to break it down if it is too
> complicated.
Easily separable cleanups are in r157440, revised patch in r157458.
Thanks!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120524/564cdeca/attachment.html>
More information about the cfe-commits
mailing list