2018-08-30 07:18:55 -05:00
|
|
|
// run-pass
|
2017-06-14 13:25:41 -05:00
|
|
|
// Regression test for an obscure issue with the projection cache.
|
|
|
|
|
|
|
|
fn into_iter<I: Iterator>(a: &I) -> Groups<I> {
|
|
|
|
Groups { _a: a }
|
|
|
|
}
|
|
|
|
|
|
|
|
pub struct Groups<'a, I: 'a> {
|
|
|
|
_a: &'a I,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl<'a, I: Iterator> Iterator for Groups<'a, I> {
|
|
|
|
type Item = Group<'a, I>;
|
|
|
|
fn next(&mut self) -> Option<Self::Item> {
|
|
|
|
None
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pub struct Group<'a, I: Iterator + 'a>
|
|
|
|
where I::Item: 'a // <-- needed to trigger ICE!
|
|
|
|
{
|
|
|
|
_phantom: &'a (),
|
|
|
|
_ice_trigger: I::Item, // <-- needed to trigger ICE!
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
let _ = into_iter(&[0].iter().map(|_| 0)).map(|grp| {
|
|
|
|
let _g = grp;
|
|
|
|
});
|
|
|
|
}
|