This is not totally unnecessary unsafe code, it is clearly documented as being necessary for some extra perf on the shootout benchmark. Additionally, it is clearly documented as to what exactly it is replacing, and why the current machinery doesn't quite cut it.

Once DST lands (soon), this unsafe block will go away and will no longer be necessary, there is a clear path forward. Currently today `foo.move_iter().collect()` allocates a temporary `Vec<T>`, then allocates a `~[T]`, then copies data. This is why `into_owned()` is so slow today.