// run-pass // This is a regression test for the ICE from issue #10846. // // The original issue causing the ICE: the LUB-computations during // type inference were encountering late-bound lifetimes, and // asserting that such lifetimes should have already been substituted // with a concrete lifetime. // // However, those encounters were occurring within the lexical scope // of the binding for the late-bound lifetime; that is, the late-bound // lifetimes were perfectly valid. The core problem was that the type // folding code was over-zealously passing back all lifetimes when // doing region-folding, when really all clients of the region-folding // case only want to see FREE lifetime variables, not bound ones. // pretty-expanded FIXME #23616 pub fn main() { fn explicit() { fn test(_x: Option>) where F: FnMut(Box FnMut(&'a isize)>) {} test(Some(Box::new(|_f: Box FnMut(&'a isize)>| {}))); } // The code below is shorthand for the code above (and more likely // to represent what one encounters in practice). fn implicit() { fn test(_x: Option>) where F: FnMut(Box) {} test(Some(Box::new(|_f: Box| {}))); } explicit(); implicit(); }