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())
|
Some(fn_def_id.to_def_id())
|
||||||
}
|
}
|
||||||
ItemKind::OpaqueTy(hir::OpaqueTy {
|
ItemKind::OpaqueTy(&hir::OpaqueTy {
|
||||||
origin: hir::OpaqueTyOrigin::TyAlias { .. },
|
origin: hir::OpaqueTyOrigin::TyAlias { parent, in_assoc_ty },
|
||||||
..
|
..
|
||||||
}) => {
|
}) => {
|
||||||
let parent_id = tcx.hir().get_parent_item(hir_id);
|
if in_assoc_ty {
|
||||||
assert_ne!(parent_id, hir::CRATE_OWNER_ID);
|
assert!(matches!(tcx.def_kind(parent), DefKind::AssocTy));
|
||||||
debug!("generics_of: parent of opaque ty {:?} is {:?}", def_id, parent_id);
|
} 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
|
// Opaque types are always nested within another item, and
|
||||||
// inherit the generics of the item.
|
// inherit the generics of the item.
|
||||||
Some(parent_id.to_def_id())
|
Some(parent.to_def_id())
|
||||||
}
|
}
|
||||||
_ => None,
|
_ => None,
|
||||||
},
|
},
|
||||||
|
@ -52,4 +52,28 @@ impl<'i> Foo<'i> for () {
|
|||||||
//~^ ERROR: unconstrained opaque type
|
//~^ 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() {}
|
fn main() {}
|
||||||
|
@ -176,6 +176,60 @@ error: [*, *, o, o]
|
|||||||
LL | type ExplicitCaptureFromGat<'a> = impl Sized + Captures<'a>;
|
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`.
|
For more information about this error, try `rustc --explain E0657`.
|
||||||
|
Loading…
Reference in New Issue
Block a user