rustdoc: synthetic auto trait impls: accept unresolved region vars for now
This commit is contained in:
parent
5dbaafdb93
commit
70b4ace09d
3 changed files with 35 additions and 1 deletions
|
@ -181,8 +181,14 @@ fn clean_param_env<'tcx>(
|
||||||
})
|
})
|
||||||
.map(|pred| {
|
.map(|pred| {
|
||||||
tcx.fold_regions(pred, |r, _| match *r {
|
tcx.fold_regions(pred, |r, _| match *r {
|
||||||
ty::ReVar(vid) => vid_to_region[&vid],
|
// FIXME: Don't `unwrap_or`, I think we should panic if we encounter an infer var that
|
||||||
|
// we can't map to a concrete region. However, `AutoTraitFinder` *does* leak those kinds
|
||||||
|
// of `ReVar`s for some reason at the time of writing. See `rustdoc-ui/` tests.
|
||||||
|
// This is in dire need of an investigation into `AutoTraitFinder`.
|
||||||
|
ty::ReVar(vid) => vid_to_region.get(&vid).copied().unwrap_or(r),
|
||||||
ty::ReEarlyParam(_) | ty::ReStatic | ty::ReBound(..) | ty::ReError(_) => r,
|
ty::ReEarlyParam(_) | ty::ReStatic | ty::ReBound(..) | ty::ReError(_) => r,
|
||||||
|
// FIXME(#120606): `AutoTraitFinder` can actually leak placeholder regions which feels
|
||||||
|
// incorrect. Needs investigation.
|
||||||
ty::ReLateParam(_) | ty::RePlaceholder(_) | ty::ReErased => {
|
ty::ReLateParam(_) | ty::RePlaceholder(_) | ty::ReErased => {
|
||||||
bug!("unexpected region kind: {r:?}")
|
bug!("unexpected region kind: {r:?}")
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
// We used to ICE here while trying to synthesize auto trait impls.
|
||||||
|
// issue: 112242
|
||||||
|
//@ check-pass
|
||||||
|
//@ compile-flags: -Znormalize-docs
|
||||||
|
|
||||||
|
pub trait MyTrait<'a> {
|
||||||
|
type MyItem;
|
||||||
|
}
|
||||||
|
pub struct Inner<Q>(Q);
|
||||||
|
pub struct Outer<Q>(Inner<Q>);
|
||||||
|
|
||||||
|
impl<'a, Q> std::marker::Unpin for Inner<Q>
|
||||||
|
where
|
||||||
|
Q: MyTrait<'a>,
|
||||||
|
<Q as MyTrait<'a>>::MyItem: Copy,
|
||||||
|
{
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
// We used to ICE here while trying to synthesize auto trait impls.
|
||||||
|
// issue: 123370
|
||||||
|
//@ check-pass
|
||||||
|
|
||||||
|
pub struct Inner<'a, Q>(&'a (), Q);
|
||||||
|
|
||||||
|
pub struct Outer<'a, Q>(Inner<'a, Q>);
|
||||||
|
|
||||||
|
impl<'a, Q: Trait<'a>> std::marker::Unpin for Inner<'static, Q> {}
|
||||||
|
|
||||||
|
pub trait Trait<'a> {}
|
Loading…
Add table
Add a link
Reference in a new issue