// Regression test for #117151, this used to hang the compiler pub type ISO = (Box B>, Box A>); pub fn iso(a: F1, b: F2) -> ISO where F1: 'static + Fn(A) -> B, F2: 'static + Fn(B) -> A, { (Box::new(a), Box::new(b)) } pub fn iso_un_option(i: ISO, Option>) -> ISO { let (ab, ba) = (i.ab, i.ba); //~^ ERROR no field `ab` on type //~| ERROR no field `ba` on type let left = move |o_a| match o_a { //~^ ERROR overflow evaluating the requirement None => panic!("absured"), Some(a) => a, }; let right = move |o_b| match o_b { None => panic!("absurd"), Some(b) => b, }; iso(left, right) } fn main() {}