30 lines
608 B
Rust
30 lines
608 B
Rust
// run-pass
|
|
#![allow(dead_code)]
|
|
#![allow(unused_variables)]
|
|
// Test that we handle binder levels in object types correctly.
|
|
// Initially, the reference to `'tcx` in the object type
|
|
// `&Typer<'tcx>` was getting an incorrect binder level, yielding
|
|
// weird compilation ICEs and so forth.
|
|
|
|
// pretty-expanded FIXME #23616
|
|
|
|
trait Typer<'tcx> {
|
|
fn method(&self, data: &'tcx isize) -> &'tcx isize { data }
|
|
}
|
|
|
|
struct Tcx<'tcx> {
|
|
fields: &'tcx isize
|
|
}
|
|
|
|
impl<'tcx> Typer<'tcx> for Tcx<'tcx> {
|
|
}
|
|
|
|
fn g<'tcx>(typer: &dyn Typer<'tcx>) {
|
|
}
|
|
|
|
fn check_static_type<'x>(tcx: &Tcx<'x>) {
|
|
g(tcx)
|
|
}
|
|
|
|
fn main() { }
|