Skip to content

Conversation

Austaras
Copy link
Contributor

@Austaras Austaras commented Sep 4, 2025

related: #20422

@rustbot rustbot added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Sep 4, 2025
@@ -716,7 +717,7 @@ impl<'db> InferenceTable<'db> {
let goal: Goal = coerce_unsized_tref.cast(Interner);

self.commit_if_ok(|table| match table.solve_obligation(goal) {
Ok(Certainty::Yes) => Ok(()),
Ok((_, Certainty::Yes) | (HasChanged::Yes, Certainty::Maybe(_))) => Ok(()),
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry for the late reply. Has been quite busy on migrating more things to next-solver 😅

I think we shouldn't accept all ambiguous solutions here. If we success here, we skip for the remaining structural coercion attempts tried after this, so this might regress other type inferences or be false negative on type mismatches.

IMO we have to check extra conditions for the trait solve result like in rustc

or try this even better WIP implementation rust-lang/rust#141926

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I added this simply because what r-a used to do in chalk based trait solver, which accpets incomplete but not identical subst. It's far from perfect though.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But it seems that rustc current impl isn't too hard to follow.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, the previous rust-analyzer had been doing so but I hope we could do better 😄

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But r-a doesn't have any proof tree related infra at the moment.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, we have to implement it, too.
Actually, that's why I worked on #20578 before solving this issue.

cc https://rust-lang.zulipchat.com/#narrow/channel/185405-t-compiler.2Frust-analyzer/topic/.5Bnext-solver.5D.3A.20unsize.20coercions/near/535289423

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually, I setup the proof tree infra in my (to be published) coercion PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
S-waiting-on-review Status: Awaiting review from the assignee but also interested parties.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants