Skip to content

Commit

Permalink
Auto merge of rust-lang#103601 - compiler-errors:no-opaque-probe-in-n…
Browse files Browse the repository at this point in the history
…ll-relate, r=oli-obk

Remove `commit_if_ok` probe from NLL type relation

It was not really necessary to add the `commit_if_ok` in rust-lang#100092 -- I added it to protect us against weird inference error messages due to recursive RPIT calls, but we are always on the error path when this happens anyways, and I can't come up with an example that makes this manifest.

Fixes rust-lang#103599

r? `@oli-obk` since you reviewed rust-lang#100092, feel free to re-roll.

:b: :loudspeaker:  beta-nominating this since it's on beta (which forks in ~a week~ two days :fearful:) -- worst case we could revert the original PR on beta and land this on nightly, to give it some extra soak time...
  • Loading branch information
bors committed Oct 27, 2022
2 parents 44fcfb0 + 901649e commit 9dd3d29
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 1 deletion.
2 changes: 1 addition & 1 deletion compiler/rustc_infer/src/infer/nll_relate/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -592,7 +592,7 @@ where
(&ty::Infer(ty::TyVar(vid)), _) => self.relate_ty_var((vid, b)),

(&ty::Opaque(a_def_id, _), &ty::Opaque(b_def_id, _)) if a_def_id == b_def_id => {
infcx.commit_if_ok(|_| infcx.super_combine_tys(self, a, b)).or_else(|err| {
infcx.super_combine_tys(self, a, b).or_else(|err| {
self.tcx().sess.delay_span_bug(
self.delegate.span(),
"failure to relate an opaque to itself should result in an error later on",
Expand Down
10 changes: 10 additions & 0 deletions src/test/ui/impl-trait/issue-103599.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// check-pass

trait T {}

fn wrap(x: impl T) -> impl T {
//~^ WARN function cannot return without recursing
wrap(wrap(x))
}

fn main() {}
14 changes: 14 additions & 0 deletions src/test/ui/impl-trait/issue-103599.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
warning: function cannot return without recursing
--> $DIR/issue-103599.rs:5:1
|
LL | fn wrap(x: impl T) -> impl T {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot return without recursing
LL |
LL | wrap(wrap(x))
| ------- recursive call site
|
= help: a `loop` may express intention better if this is on purpose
= note: `#[warn(unconditional_recursion)]` on by default

warning: 1 warning emitted

0 comments on commit 9dd3d29

Please sign in to comment.