//@ build-pass | |
// needs to be build-pass, because it is a regression test for a mir validation failure | |
// that only happens during codegen. | |
struct D; | |
trait Tr { | |
type It; | |
fn foo(self) -> Option<Self::It>; | |
} | |
impl<'a> Tr for &'a D { | |
type It = (); | |
fn foo(self) -> Option<()> { None } | |
} | |
fn run<F>(f: F) | |
where for<'a> &'a D: Tr, | |
F: Fn(<&D as Tr>::It), | |
{ | |
let d = &D; | |
while let Some(i) = d.foo() { | |
f(i); | |
} | |
} | |
fn main() { | |
run(|_| {}); | |
} |