When updating an existing archive, llvm-ar opens the old archive into a MemoryBuffer, does its thing, and writes the results to a temporary file. That file is then renamed to the original archive filename, thus replacing it with the updated contents. However, on Windows at least, what would happen is that the MemoryBuffer for the old archive would actually be an mmap'ed view of the file, so when it came time to do the rename via Win32's ReplaceFile, it would succeed but would be unable to fully replace the file since there would still be a handle open on it; instead, the old version got renamed to a random temporary name and left behind.
This patch fixes the problem by allowing the backing memory buffer to be destroyed after it's no longer needed, just before the rename takes place.
We really should not do this.
All these objects just wrap a MemoryBufferRef. It is llvm-ar that should be deleting these buffers earlier.