analyze: initial implementation of NON_NULL static analysis #1081
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This adds a very basic static analysis for
NON_NULL
within the currentdataflow
framework. It starts by optimistically assuming that all pointers areNON_NULL
, and removes the permission from pointers into which aptr::null()
or equivalent might flow. This branch just implements the static analysis, not rewriting.I'm actually not a huge fan of this design - I think we'd probably get much better results with a path-sensitive analysis that can handle common patterns from C like
if !p.is_null() { let q = (&p).field; /* use q... */ }
by detecting null checks in the CFG. But the simple path-insensitive version is sufficient for now, and gives us somewhere to plug in the dynamic analysis results.