Don't repeatedly duplicate TAIT lifetimes for each subsequently nested TAIT
This commit is contained in:
parent
00ed4edb44
commit
ffb4206577
@ -195,16 +195,19 @@ pub(super) fn generics_of(tcx: TyCtxt<'_>, def_id: LocalDefId) -> ty::Generics {
|
||||
}
|
||||
Some(fn_def_id.to_def_id())
|
||||
}
|
||||
ItemKind::OpaqueTy(hir::OpaqueTy {
|
||||
origin: hir::OpaqueTyOrigin::TyAlias { .. },
|
||||
ItemKind::OpaqueTy(&hir::OpaqueTy {
|
||||
origin: hir::OpaqueTyOrigin::TyAlias { parent, in_assoc_ty },
|
||||
..
|
||||
}) => {
|
||||
let parent_id = tcx.hir().get_parent_item(hir_id);
|
||||
assert_ne!(parent_id, hir::CRATE_OWNER_ID);
|
||||
debug!("generics_of: parent of opaque ty {:?} is {:?}", def_id, parent_id);
|
||||
if in_assoc_ty {
|
||||
assert!(matches!(tcx.def_kind(parent), DefKind::AssocTy));
|
||||
} else {
|
||||
assert!(matches!(tcx.def_kind(parent), DefKind::TyAlias));
|
||||
}
|
||||
debug!("generics_of: parent of opaque ty {:?} is {:?}", def_id, parent);
|
||||
// Opaque types are always nested within another item, and
|
||||
// inherit the generics of the item.
|
||||
Some(parent_id.to_def_id())
|
||||
Some(parent.to_def_id())
|
||||
}
|
||||
_ => None,
|
||||
},
|
||||
|
@ -52,4 +52,28 @@ impl<'i> Foo<'i> for () {
|
||||
//~^ ERROR: unconstrained opaque type
|
||||
}
|
||||
|
||||
trait Nesting<'a> {
|
||||
type Output;
|
||||
}
|
||||
impl<'a> Nesting<'a> for &'a () {
|
||||
type Output = &'a ();
|
||||
}
|
||||
type NestedDeeply<'a> =
|
||||
impl Nesting< //~ [*, o]
|
||||
'a,
|
||||
Output = impl Nesting< //~ [*, o]
|
||||
'a,
|
||||
Output = impl Nesting< //~ [*, o]
|
||||
'a,
|
||||
Output = impl Nesting< //~ [*, o]
|
||||
'a,
|
||||
Output = impl Nesting<'a> //~ [*, o]
|
||||
>
|
||||
>,
|
||||
>,
|
||||
>;
|
||||
fn test<'a>() -> NestedDeeply<'a> {
|
||||
&()
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
@ -176,6 +176,60 @@ error: [*, *, o, o]
|
||||
LL | type ExplicitCaptureFromGat<'a> = impl Sized + Captures<'a>;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 24 previous errors
|
||||
error: [*, o]
|
||||
--> $DIR/variance.rs:62:5
|
||||
|
|
||||
LL | / impl Nesting<
|
||||
LL | | 'a,
|
||||
LL | | Output = impl Nesting<
|
||||
LL | | 'a,
|
||||
... |
|
||||
LL | | >,
|
||||
LL | | >;
|
||||
| |_____^
|
||||
|
||||
error: [*, o]
|
||||
--> $DIR/variance.rs:64:18
|
||||
|
|
||||
LL | Output = impl Nesting<
|
||||
| __________________^
|
||||
LL | | 'a,
|
||||
LL | | Output = impl Nesting<
|
||||
LL | | 'a,
|
||||
... |
|
||||
LL | | >,
|
||||
LL | | >,
|
||||
| |_________^
|
||||
|
||||
error: [*, o]
|
||||
--> $DIR/variance.rs:66:22
|
||||
|
|
||||
LL | Output = impl Nesting<
|
||||
| ______________________^
|
||||
LL | | 'a,
|
||||
LL | | Output = impl Nesting<
|
||||
LL | | 'a,
|
||||
LL | | Output = impl Nesting<'a>
|
||||
LL | | >
|
||||
LL | | >,
|
||||
| |_____________^
|
||||
|
||||
error: [*, o]
|
||||
--> $DIR/variance.rs:68:26
|
||||
|
|
||||
LL | Output = impl Nesting<
|
||||
| __________________________^
|
||||
LL | | 'a,
|
||||
LL | | Output = impl Nesting<'a>
|
||||
LL | | >
|
||||
| |_________________^
|
||||
|
||||
error: [*, o]
|
||||
--> $DIR/variance.rs:70:30
|
||||
|
|
||||
LL | Output = impl Nesting<'a>
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 29 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0657`.
|
||||
|
Loading…
Reference in New Issue
Block a user