Skip to content

Commit

Permalink
Rollup merge of #122449 - compiler-errors:stranded-opaque, r=oli-obk
Browse files Browse the repository at this point in the history
Delay a bug for stranded opaques

r? oli-obk

Fixes #122445
  • Loading branch information
matthiaskrgr committed Mar 13, 2024
2 parents 8d2f79c + 026eb3d commit c52ce4e
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 1 deletion.
8 changes: 7 additions & 1 deletion compiler/rustc_hir_analysis/src/check/check.rs
Original file line number Diff line number Diff line change
Expand Up @@ -381,11 +381,17 @@ fn check_opaque_meets_bounds<'tcx>(
match ocx.eq(&misc_cause, param_env, opaque_ty, hidden_ty) {
Ok(()) => {}
Err(ty_err) => {
// Some types may be left "stranded" if they can't be reached
// from an astconv'd bound but they're mentioned in the HIR. This
// will happen, e.g., when a nested opaque is inside of a non-
// existent associated type, like `impl Trait<Missing = impl Trait>`.
// See <tests/ui/impl-trait/stranded-opaque.rs>.
let ty_err = ty_err.to_string(tcx);
tcx.dcx().span_bug(
let guar = tcx.dcx().span_delayed_bug(
span,
format!("could not unify `{hidden_ty}` with revealed type:\n{ty_err}"),
);
return Err(guar);
}
}

Expand Down
13 changes: 13 additions & 0 deletions tests/ui/impl-trait/stranded-opaque.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
trait Trait {}

impl Trait for i32 {}

// Since `Assoc` doesn't actually exist, it's "stranded", and won't show up in
// the list of opaques that may be defined by the function. Make sure we don't
// ICE in this case.
fn produce<T>() -> impl Trait<Assoc = impl Trait> {
//~^ ERROR associated type `Assoc` not found for `Trait`
16
}

fn main () {}
9 changes: 9 additions & 0 deletions tests/ui/impl-trait/stranded-opaque.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
error[E0220]: associated type `Assoc` not found for `Trait`
--> $DIR/stranded-opaque.rs:8:31
|
LL | fn produce<T>() -> impl Trait<Assoc = impl Trait> {
| ^^^^^ associated type `Assoc` not found

error: aborting due to 1 previous error

For more information about this error, try `rustc --explain E0220`.

0 comments on commit c52ce4e

Please sign in to comment.