<div dir="ltr">Hello friends!<div><br></div><div>I've been evaluating the state of null analysis/etc. in clang recently, and it looks like clang's story for static nullness analysis has been getting quite a bit better over time. With the help of others, I've identified a few areas where we may be able to improve, but I'd really like opinions on whether we think these changes would actually be a good thing.</div><div><br></div><div>Specifically, I have four distinct changes in mind:</div><div>1. Turn some amount of nullability analysis on by default (with -Wall) in clang. This would be conceptually <i>very</i> similar to uninitialized value checking, and would be able to catch simple cases like</div><div><br></div><div>Foo *p = nullptr;</div><div>if (p = getPtr())</div><div>  p->oneThing();</div><div>else</div><div>  p->anotherThing(); // warning: p is null.</div><div><br></div><div>...But no promises for any nontrivial cases (without heavily annotated locals/function signatures ;) ), because there's currently no planned way to silence the warning if we're somehow wrong.</div><div><br></div><div>2. Speaking of nullness annotations, clang supports a lot of them. Migrating old code to use them could be painful, so having a <a href="https://docs.google.com/document/d/1vXuhRTQsbf4F9PbFtCoapuAhCU4RrD-IAiaUfTwp4uA/edit?usp=sharing" target="_blank">tool that annotates obvious things for us may be nice to have</a> (<a href="https://docs.google.com/document/d/1vXuhRTQsbf4F9PbFtCoapuAhCU4RrD-IAiaUfTwp4uA/edit?usp=sharing" target="_blank">https://docs.google.com/document/d/1vXuhRTQsbf4F9PbFtCoapuAhCU4RrD-IAiaUfTwp4uA/edit?usp=sharing</a>).</div><div><br></div><div>3. Add a CXXRecordDecl-level attribute that instructs nullness analysis to treat instances of the attributed type as a pointer for the sake of nullness analysis. This would enable nullness analysis of things like unique_ptr/shared_ptr/... Doc is available <a href="https://docs.google.com/document/d/1Zyb8o210EqkAXxrnrv4XtRu4w_i0yXO04p4KTuTde4M/edit?usp=sharing" target="_blank">here</a> (<a href="https://docs.google.com/document/d/1Zyb8o210EqkAXxrnrv4XtRu4w_i0yXO04p4KTuTde4M/edit?usp=sharing" target="_blank">https://docs.google.com/document/d/1Zyb8o210EqkAXxrnrv4XtRu4w_i0yXO04p4KTuTde4M/edit?usp=sharing</a>).</div><div><br></div><div>4. Add clang_tidy checks for missing nullness annotations on function signatures/global variable decls/member variable decls/...</div><div><br></div><div>Like said, any feedback on how {useful,useless} we think these things would be (and feedback on on the designs themselves) is highly appreciated. :)</div><div><br></div><div>Thanks for your time!</div><div>George</div></div>