Skip to content

Make PinCoerceUnsized require Deref#149218

Open
theemathas wants to merge 2 commits intorust-lang:mainfrom
theemathas:pin-coerce-unsized
Open

Make PinCoerceUnsized require Deref#149218
theemathas wants to merge 2 commits intorust-lang:mainfrom
theemathas:pin-coerce-unsized

Conversation

@theemathas
Copy link
Contributor

@theemathas theemathas commented Nov 22, 2025

View all comments

Also, delete impls on non-Deref types.

Pin doesn't do anything useful for non-Deref types, so PinCoerceUnsized on such types makes no sense.

This is a breaking change, since stable code can observe the deleted PinCoerceUnsized impls by uselessly coercing between such types inside a Pin.

There is still some strange behavior, such as Pin<&mut i32> being able to coerce to Pin<&dyn Send>, but not being able to coerce to Pin<&i32>. However, I don't think it's possible to fix this.

Fixes #145081

@theemathas theemathas added T-libs-api Relevant to the library API team, which will review and decide on the PR/issue. A-coercions Area: implicit and explicit `expr as Type` coercions needs-fcp This change is insta-stable, or significant enough to need a team FCP to proceed. A-pin Area: Pin T-types Relevant to the types team, which will review and decide on the PR/issue. needs-crater This change needs a crater run to check for possible breakage in the ecosystem. labels Nov 22, 2025
@rustbot rustbot added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Nov 22, 2025
@rustbot
Copy link
Collaborator

rustbot commented Nov 22, 2025

r? @tgross35

rustbot has assigned @tgross35.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

@rust-log-analyzer

This comment has been minimized.

@theemathas theemathas force-pushed the pin-coerce-unsized branch 2 times, most recently from f921d32 to f4fa919 Compare November 23, 2025 03:35
@jdonszelmann
Copy link
Contributor

@bors try

rust-bors bot added a commit that referenced this pull request Nov 23, 2025
@rust-bors

This comment has been minimized.

@rust-bors
Copy link
Contributor

rust-bors bot commented Nov 23, 2025

☀️ Try build successful (CI)
Build commit: 94e8487 (94e848735e78b58442e0b82e9c60f8f430840389, parent: e0e204f3e97ad5f79524b9c259dc38df606ed82c)

@saethlin
Copy link
Member

@craterbot check

@craterbot
Copy link
Collaborator

👌 Experiment pr-149218 created and queued.
🤖 Automatically detected try build 94e8487
🔍 You can check out the queue and this experiment's details.

ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more

@craterbot craterbot added S-waiting-on-crater Status: Waiting on a crater run to be completed. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Nov 24, 2025
@craterbot
Copy link
Collaborator

🚧 Experiment pr-149218 is now running

ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more

@Darksonn
Copy link
Member

Darksonn commented Dec 1, 2025

I added these impls because otherwise the introduction of PinCoerceUnsized would have been a breaking change. I'm in favor of removing them.

@craterbot
Copy link
Collaborator

🎉 Experiment pr-149218 is completed!
📊 6 regressed and 5 fixed (743358 total)
📊 1966 spurious results on the retry-regessed-list.txt, consider a retry1 if this is a significant amount.
📰 Open the summary report.

⚠️ If you notice any spurious failure please add them to the denylist!
ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more

Footnotes

  1. re-run the experiment with crates=https://crater-reports.s3.amazonaws.com/pr-149218/retry-regressed-list.txt

@craterbot craterbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-crater Status: Waiting on a crater run to be completed. labels Dec 2, 2025
@workingjubilee
Copy link
Member

@craterbot
Copy link
Collaborator

👌 Experiment pr-149218-1 created and queued.
🤖 Automatically detected try build 94e8487
🔍 You can check out the queue and this experiment's details.

ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more

@craterbot craterbot added S-waiting-on-crater Status: Waiting on a crater run to be completed. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Dec 3, 2025
@rust-bors
Copy link
Contributor

rust-bors bot commented Mar 24, 2026

📌 Commit 969c3df has been approved by oli-obk

It is now in the queue for this repository.

@rust-bors rust-bors bot added the S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. label Mar 24, 2026
@rust-bors rust-bors bot removed the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Mar 24, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Mar 24, 2026
…li-obk

Make PinCoerceUnsized require Deref

Also, delete impls on non-Deref types.

Pin doesn't do anything useful for non-Deref types, so PinCoerceUnsized on such types makes no sense.

This is a breaking change, since stable code can observe the deleted `PinCoerceUnsized` impls by uselessly coercing between such types inside a `Pin`.

There is still some strange behavior, such as `Pin<&mut i32>` being able to coerce to `Pin<&dyn Send>`, but not being able to coerce to `Pin<&i32>`. However, I don't think it's possible to fix this.

Fixes rust-lang#145081
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Mar 24, 2026
…li-obk

Make PinCoerceUnsized require Deref

Also, delete impls on non-Deref types.

Pin doesn't do anything useful for non-Deref types, so PinCoerceUnsized on such types makes no sense.

This is a breaking change, since stable code can observe the deleted `PinCoerceUnsized` impls by uselessly coercing between such types inside a `Pin`.

There is still some strange behavior, such as `Pin<&mut i32>` being able to coerce to `Pin<&dyn Send>`, but not being able to coerce to `Pin<&i32>`. However, I don't think it's possible to fix this.

Fixes rust-lang#145081
rust-bors bot pushed a commit that referenced this pull request Mar 24, 2026
…uwer

Rollup of 7 pull requests

Successful merges:

 - #149218 (Make PinCoerceUnsized require Deref)
 - #154094 (add neon load/store assembly test)
 - #154142 (Delegation: eliminate usage of AST from generics creation)
 - #154276 (allow `incomplete_features` in more tests)
 - #154284 (doc: linker-plugin-based LTO: update list of good combinations)
 - #154286 (Cherry-pick 1.94.1 release notes)
 - #154303 (Remove more `BuiltinLintDiag` variants - part 2)
@rust-bors
Copy link
Contributor

rust-bors bot commented Mar 24, 2026

⌛ Testing commit 969c3df with merge 31fcd54...

Workflow: https://github.com/rust-lang/rust/actions/runs/23496789264

rust-bors bot pushed a commit that referenced this pull request Mar 24, 2026
Make PinCoerceUnsized require Deref



Also, delete impls on non-Deref types.

Pin doesn't do anything useful for non-Deref types, so PinCoerceUnsized on such types makes no sense.

This is a breaking change, since stable code can observe the deleted `PinCoerceUnsized` impls by uselessly coercing between such types inside a `Pin`.

There is still some strange behavior, such as `Pin<&mut i32>` being able to coerce to `Pin<&dyn Send>`, but not being able to coerce to `Pin<&i32>`. However, I don't think it's possible to fix this.

Fixes #145081
@JonathanBrouwer
Copy link
Contributor

@bors r-
#154312 (comment)

@rust-bors rust-bors bot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. labels Mar 24, 2026
@rust-bors
Copy link
Contributor

rust-bors bot commented Mar 24, 2026

This pull request was unapproved.

This PR was contained in a rollup (#154312), which was unapproved.

Auto build was cancelled due to unapproval. Cancelled workflows:

@rustbot rustbot added the O-SGX Target: SGX label Mar 25, 2026
@rustbot

This comment has been minimized.

Also, delete impls on non-Deref types.

Pin doesn't do anything useful for non-Deref types, so PinCoerceUnsized
on such types makes no sense.

This is a breaking change, since stable code can observe the deleted
`PinCoerceUnsized` impls by uselessly coercing between such types
inside a `Pin`.

There is still some strange behavior, such as `Pin<&mut i32>` being
able to coerce to `Pin<&dyn Send>`, but not being able to coerce to
`Pin<&i32>`. However, I don't think it's possible to fix this.

Fixes rust-lang#145081
@rustbot
Copy link
Collaborator

rustbot commented Mar 25, 2026

This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

@theemathas
Copy link
Contributor Author

The UserRef type in the SGX code seemingly is meant to be used as &UserRef<T> and &mut UserRef<T>. It's never meant to be used as a by-value UserRef<T>. Therefore, the PinCoerceUnsized impl for it doesn't make much sense, as users aren't meant to be making a Pin<UserRef<T>>. Therefore, I've removed the impl.

@rustbot ready

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Mar 25, 2026
@oli-obk
Copy link
Contributor

oli-obk commented Mar 25, 2026

@bors r+

@rust-bors
Copy link
Contributor

rust-bors bot commented Mar 25, 2026

📌 Commit f55c8cc has been approved by oli-obk

It is now in the queue for this repository.

@rust-bors rust-bors bot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 25, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-coercions Area: implicit and explicit `expr as Type` coercions A-pin Area: Pin disposition-merge This issue / PR is in PFCP or FCP with a disposition to merge it. finished-final-comment-period The final comment period is finished for this PR / Issue. I-lang-radar Items that are on lang's radar and will need eventual work or consideration. needs-fcp This change is insta-stable, or significant enough to need a team FCP to proceed. O-SGX Target: SGX relnotes Marks issues that should be documented in the release notes of the next release. S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-lang Relevant to the language team T-libs-api Relevant to the library API team, which will review and decide on the PR/issue. T-types Relevant to the types team, which will review and decide on the PR/issue. to-announce Announce this issue on triage meeting

Projects

None yet

Development

Successfully merging this pull request may close these issues.

PinCoerceUnsized has strange impls