| // 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() { } |