Fix the semantics of strlen
on symbolic strings.
#469
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.
Previously,
strlen
would recurse down a string until itran into a concrete zero. This is fine, except that it would
assert that each load along the way would succeed, without taking
into account the previous zero tests that had to fail. To correct
this we need to emulate a path condition such that to load
at position
n
each of then-1
previous locations must havebeen non-zero, and the loads are only required to succeed under
that condition. This allows one, for example, to assume that
some value in a string is 0 (but not specify which one). Previously,
strlen
would index off the end of the allocation of such a stringand fail. Now it will succeed because the path condition required
to index out-of-bounds is inconsistent.
Fixes #468