42 lines
999 B
Rust
42 lines
999 B
Rust
//@ run-rustfix
|
|
//@ check-pass
|
|
#![deny(explicit_outlives_requirements)]
|
|
|
|
pub trait TypeCx {
|
|
type Ty;
|
|
}
|
|
|
|
pub struct Pat<Cx: TypeCx> {
|
|
pub ty: Cx::Ty,
|
|
}
|
|
|
|
// Simple recursive case: no warning
|
|
pub struct MyTypeContextSimpleRecursive<'thir, 'tcx: 'thir> {
|
|
pub pat: Pat<MyTypeContextSimpleRecursive<'thir, 'tcx>>,
|
|
}
|
|
impl<'thir, 'tcx: 'thir> TypeCx for MyTypeContextSimpleRecursive<'thir, 'tcx> {
|
|
type Ty = ();
|
|
}
|
|
|
|
// Non-recursive case: we want a warning
|
|
pub struct MyTypeContextNotRecursive<'thir, 'tcx: 'thir> {
|
|
pub tcx: &'tcx (),
|
|
pub thir: &'thir (),
|
|
}
|
|
impl<'thir, 'tcx: 'thir> TypeCx for MyTypeContextNotRecursive<'thir, 'tcx> {
|
|
type Ty = ();
|
|
}
|
|
|
|
|
|
// Mixed-recursive case: we want a warning
|
|
pub struct MyTypeContextMixedRecursive<'thir, 'tcx: 'thir> {
|
|
pub pat: Pat<MyTypeContextMixedRecursive<'thir, 'tcx>>,
|
|
pub tcx: &'tcx (),
|
|
pub thir: &'thir (),
|
|
}
|
|
impl<'thir, 'tcx: 'thir> TypeCx for MyTypeContextMixedRecursive<'thir, 'tcx> {
|
|
type Ty = ();
|
|
}
|
|
|
|
fn main() {}
|