-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Rust: Implement type inference for trait objects/dyn types
#20084
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
Rust: Implement type inference for trait objects/dyn types
#20084
Conversation
59e3ac7 to
8de4313
Compare
55c3674 to
219e26e
Compare
|
Note: The first DCA run showed an increase in type inference inconsistencies. I've fixed those and started a second DCA run. EDIT: The second DCA shows that the type inference inconsistencies are now fixed. The number of type inference inconsistencies now only decreases. |
e301fd5 to
f5605c9
Compare
geoffw0
left a comment
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.
QL LGTM, though I didn't quite follow every detail in TypeMention.qll. Tests look great. I'm looking at the DCA run as well but it looks like you've already fixed an issue there.
geoffw0
left a comment
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.
Questions and concerns addressed, LGTM!
This PR implements support for trait objects on the form
dyn Trait.The implementation works as follows:
dyn Traitappears somewhere as a declared type then we create aDynTraitTypethat consists of the traitTrait.dyn Traithas a type parameter for every type parameter ofTrait. There is a 1-to-1 correspondence but they're not equal.dyn Traittype is made to implementTraitas if there was animpl<A, B, ...> Trait<A, B, ...> for dyn Trait<A, B, ..>block in the source.Currently the PR doesn't account for the auto traits that one can specify with a
+, for instancedyn Clone + Send + Sync. I don't know if we have a need to consider those, but if we do it should be possible by building on top of the work in this PR.DCA shows a 0.33% point increase in resolved call targets and no change in analysis time.