-
Notifications
You must be signed in to change notification settings - Fork 273
Do not use base_type_eq with non-code types [blocks: #4056] #4314
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Do not use base_type_eq with non-code types [blocks: #4056] #4314
Conversation
9586664
to
9ff73d9
Compare
9ff73d9
to
b133eb3
Compare
b133eb3
to
91ce314
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This PR failed Diffblue compatibility checks (cbmc commit: 91ce314).
Build URL: https://travis-ci.com/diffblue/test-gen/builds/102973206
Status will be re-evaluated on next push.
Common spurious failures:
-
the cbmc commit has disappeared in the mean time (e.g. in a force-push)
-
the author is not in the list of contributors (e.g. first-time contributors).
-
the compatibility was already broken by an earlier merge.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Note however that in order not to have terrible performance consequences for Java we must first merge simplify-after-deref or equivalent code, because this exposes the difference between e.g. List
, List<T>
and List<Integer>
, which value-set-deref will express using a byte-extract op, and which the simplifier can remove.
@smowton Would you be able to contribute some performance comparison data that shows how important simplify-after-deref is? |
91ce314
to
1f3d104
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This PR failed Diffblue compatibility checks (cbmc commit: 1f3d104).
Build URL: https://travis-ci.com/diffblue/test-gen/builds/103074413
Status will be re-evaluated on next push.
Common spurious failures:
-
the cbmc commit has disappeared in the mean time (e.g. in a force-push)
-
the author is not in the list of contributors (e.g. first-time contributors).
-
the compatibility was already broken by an earlier merge.
Benchmarks posted at #3725 |
This is generally useful because it turns member-of-if into if-of-member, which avoids repeatedly quoting large complex if expressions in a with_exprt, but it is especially good for field sensitivity as it puts member expressions directly on top of symbol expressions, which field sensitivity knows how to deal with.
This was fine with develop with and without simplification after dereferencing, but would break if removing base_type_eq without adding the simplification step.
We consistently use tag types, and two expressions are now base_type_eq if, and only if, they have types that compare equal.
No functional changes
The check is probably ok to go too, but we should make type preservation of `simplify` an invariant first.
1f3d104
to
cb67b9b
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
✔️
Passed Diffblue compatibility checks (cbmc commit: cb67b9b).
Build URL: https://travis-ci.com/diffblue/test-gen/builds/103460609
We consistently use tag types, and two expressions are now base_type_eq if, and
only if, they have types that compare equal.
This PR should unblock various PRs building on #4056 by skipping the breaking changes that relate to linking.