-
Notifications
You must be signed in to change notification settings - Fork 12.8k
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
Properly handle Pin<&mut dyn* Trait>
receiver in codegen
#104594
Conversation
r? @estebank (rustbot has picked a reviewer for you, use r? to override) |
☔ The latest upstream changes (presumably #104533) made this pull request unmergeable. Please resolve the merge conflicts. |
// FIXME(dyn-star): `dyn*` upcasting is currently broken and ICEy. | ||
/* else if !self.tcx().features().trait_upcasting { |
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.
I'm uncomfortable leaving this commented out.
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.
Are you asking for it to be deleted instead? Because I can do that.
@@ -782,9 +782,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { | |||
|
|||
match (source.kind(), target.kind()) { | |||
// Trait+Kx+'a -> Trait+Ky+'b (upcasts). | |||
(&ty::Dynamic(ref data_a, _, dyn_a), &ty::Dynamic(ref data_b, _, dyn_b)) | |||
if dyn_a == dyn_b => |
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.
Surprised by this removal
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.
I see the more specific pattern here and in the next file, but doesn't this code have to run for non dyn*
?
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.
Can you be more specific? Did you see the PR description that mentions "Also, disable dyn* trait upcasting"?
Because all this disables is CoerceUnsized
implementations from dyn* Trait
to dyn* SuperTrait
, which cannot be implemented with CoerceUnsized
and need to be reworked.
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.
I see. r=me after rebasing
src/test/ui/dyn-star/upcast.rs
Outdated
@@ -1,7 +1,6 @@ | |||
// run-pass | |||
// known-bug: unknown |
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.
poetry
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.
I can file a bug for this.
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.
If you do, could you also add it to #102425?
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.
The changes look reasonable, but might there be someone already involved in dyn*
that can double check?
r? @eholk |
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.
Looks good to me. I added a couple small comments or questions, but I think merging as-is is fine, so r=me if you're ready.
src/test/ui/dyn-star/upcast.rs
Outdated
@@ -1,7 +1,6 @@ | |||
// run-pass | |||
// known-bug: unknown |
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.
If you do, could you also add it to #102425?
d8cb8c3
to
b60b76c
Compare
@bors r=eholk,estebank |
…iaskrgr Rollup of 9 pull requests Successful merges: - rust-lang#103908 (Suggest `.clone()` or `ref binding` on E0382) - rust-lang#104517 (Throw error on failure in loading llvm-plugin) - rust-lang#104594 (Properly handle `Pin<&mut dyn* Trait>` receiver in codegen) - rust-lang#104742 (Make `deref_into_dyn_supertrait` lint the impl and not the usage) - rust-lang#104753 (Pass `InferCtxt` to `DropRangeVisitor` so we can resolve vars) - rust-lang#104771 (Add regression test for issue rust-lang#99938) - rust-lang#104772 (Small accessibility improvements) - rust-lang#104775 (Use ObligationCtxt::normalize) - rust-lang#104778 (:arrow_up: rust-analyzer) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
This ensures we can actually await a
dyn* Future
, which seems important for async fn in dyn trait.Also, disable
dyn*
trait upcasting. It's not exactly complete right now, and can cause strange ICEs for no reason -- nobody's using it either. I thought it was cute to implement when I did it, but I didn't think about how it interacts structurally withCoerceUnsized
correctly.Fixes #104794, presumably removing
dyn*
upcasting and itsCoerceUnsized
issues does the trick.