Spawned off of #53220 (comment)
In this code (play), we report "borrow used here in later iteration of loop" for the members.len() call that is not within the loop.
#![feature(nll)]
struct Archive;
struct ArchiveIterator<'a> { x: &'a Archive }
struct ArchiveChild<'a> { x: &'a Archive }
struct A { raw: &'static mut Archive }
struct Iter<'a> { raw: &'a mut ArchiveIterator<'a> }
struct C<'a> { raw: &'a mut ArchiveChild<'a> }
impl A { pub fn iter(&self) -> Iter<'_> { panic!() } }
impl Drop for A { fn drop(&mut self) { } }
impl<'a> Drop for C<'a> { fn drop(&mut self) { } }
impl<'a> Iterator for Iter<'a> {
type Item = C<'a>;
fn next(&mut self) -> Option<C<'a>> { panic!() }
}
fn error(archive: &A) {
let mut members: Vec<&mut ArchiveChild<'_>> = vec![];
for child in archive.iter() {
members.push(child.raw);
}
members.len();
}
fn main() { }
(I assume this is due to some bug in how we are attempting to reverse-engineer the existence of a loop by analyzing the basic-block control-flow of MIR alone.)
Spawned off of #53220 (comment)
In this code (play), we report "borrow used here in later iteration of loop" for the
members.len()call that is not within the loop.(I assume this is due to some bug in how we are attempting to reverse-engineer the existence of a loop by analyzing the basic-block control-flow of MIR alone.)