Improvements to array bounds inference #226
Merged
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.
Context-sensitive bounds:
Consider the following example:
Here, we need to keep track of the call-sites of
somefunc
. This allows us to keep track of the length association correctly.That way, we can correctly infer the bounds as below:
Prioritized Bounds:
When we have conflicting bounds, use bounds based on priority:
Example:
In the above case, even though
p
has conflicting bounds frommalloc
andmemcpy
we will infer the bounds ofp
to becount(n)
.Invalidate bounds on pointer arithmetic:
If there is pointer arithmetic on a pointer, then it cannot have
count
orbyte_bounds
.For example:
The above bounds expressio for
p
ins invalid becausecount(n)
means ->bounds(p, p+n)
that means changingp
(i.e.,p++
) will make the bounds invalid.Ideally, we should do the following:
Making the above change is not straight forward. We will make another issue (enhancement) for that. As of now, we make the bounds invalid whenever we see a pointer modifying expression.
We will emit bounds for function returns.
For example:
will get converted to: