LGTM. I'm still not too fond of having those weird "finalize()" calls which change the behavior of the class, but as long as there are asserts guarding misuse it should be fine. http://reviews.llvm.org/D3574