Understanding the Drop implementation for std::vec::IntoIter

Due to some advanced interactions regarding the drop checker, I have explained it here: PhantomData and dropck confusion - #2 by Yandros Basically by saying #[may_dangle] we are promising Rust that this Drop impl will not dereference any borrows that T may be holding, except through a recursive call to drop glue. For instance, if T = &'a i32, it is safe to drop the IntoIter even past the 'a lifetime / when 'a dangles, since because &'a i32 has no drop glue, there is no way the (dangling) reference will be dereferenced (which would be unsound).

I guess for readability, here it plays no role indeed.

EDIT: it is actually used to reborrow self, as in for _ in &mut *self {, given that otherwise self would be unusable, c.f., @mbrubeck's response pointing that out (I always forget about that annoying mechanic of for sugar)

They don't. If some element's recursive drop glue panics, then the remaining elements will not be dropped, and leaks may happen. "Hell", even the whole buffer allocation will be leaked: