diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2023-03-02 07:24:01 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-02 07:24:01 +0100 |
| commit | 91dafebc91f9ef46e98ba4e592e8b1f6fb6a2145 (patch) | |
| tree | e2612eb7857203fe2970e64d610fe72e9045ebce | |
| parent | c9c9283c6aa98cc312845fe505af552b0abc8629 (diff) | |
| parent | cb9852b8e60b956421cbb6363a75d970d64372cc (diff) | |
| download | rust-91dafebc91f9ef46e98ba4e592e8b1f6fb6a2145.tar.gz rust-91dafebc91f9ef46e98ba4e592e8b1f6fb6a2145.zip | |
Rollup merge of #108575 - compiler-errors:erase, r=estebank
Erase **all** regions when probing for associated types on ambiguity in astconv Fixes #108562
| -rw-r--r-- | compiler/rustc_hir_analysis/src/astconv/mod.rs | 6 | ||||
| -rw-r--r-- | tests/ui/suggestions/suggest-trait-in-ufcs-in-hrtb.rs | 8 | ||||
| -rw-r--r-- | tests/ui/suggestions/suggest-trait-in-ufcs-in-hrtb.stderr | 9 |
3 files changed, 21 insertions, 2 deletions
diff --git a/compiler/rustc_hir_analysis/src/astconv/mod.rs b/compiler/rustc_hir_analysis/src/astconv/mod.rs index 25c467bfd2b..f5ce02c9e61 100644 --- a/compiler/rustc_hir_analysis/src/astconv/mod.rs +++ b/compiler/rustc_hir_analysis/src/astconv/mod.rs @@ -2399,8 +2399,10 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o { infcx .can_eq( ty::ParamEnv::empty(), - tcx.erase_regions(impl_.self_ty()), - tcx.erase_regions(qself_ty), + impl_.self_ty(), + // Must fold past escaping bound vars too, + // since we have those at this point in astconv. + tcx.fold_regions(qself_ty, |_, _| tcx.lifetimes.re_erased), ) }) && tcx.impl_polarity(impl_def_id) != ty::ImplPolarity::Negative diff --git a/tests/ui/suggestions/suggest-trait-in-ufcs-in-hrtb.rs b/tests/ui/suggestions/suggest-trait-in-ufcs-in-hrtb.rs new file mode 100644 index 00000000000..fbaf41245e9 --- /dev/null +++ b/tests/ui/suggestions/suggest-trait-in-ufcs-in-hrtb.rs @@ -0,0 +1,8 @@ +pub struct Bar<S>(S); + +pub trait Foo {} + +impl<S> Foo for Bar<S> where for<'a> <&'a S>::Item: Foo {} +//~^ ERROR ambiguous associated type + +fn main() {} diff --git a/tests/ui/suggestions/suggest-trait-in-ufcs-in-hrtb.stderr b/tests/ui/suggestions/suggest-trait-in-ufcs-in-hrtb.stderr new file mode 100644 index 00000000000..0ca5b9b9207 --- /dev/null +++ b/tests/ui/suggestions/suggest-trait-in-ufcs-in-hrtb.stderr @@ -0,0 +1,9 @@ +error[E0223]: ambiguous associated type + --> $DIR/suggest-trait-in-ufcs-in-hrtb.rs:5:38 + | +LL | impl<S> Foo for Bar<S> where for<'a> <&'a S>::Item: Foo {} + | ^^^^^^^^^^^^^ help: use the fully-qualified path: `<&'a S as IntoIterator>::Item` + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0223`. |
