sepavloff added a comment. In http://reviews.llvm.org/D15450#354606, @yaron.keren wrote:
> It certainly makes sense to redirect the module request to its owner instead > of duplicating it in a local copy. It is not even a duplication, it is simultaneous sharing by two unique_ptr's. > There may be a change in behaviour here, pre-patch > CodeGenAction::EndSourceFileAction() would take the BackendConsumer Module, > keeping CodeGen Module intact whereas post-patch it takes the CodeGen Module. > How does this work out? It should not be a problem. CodeGenAction::EndSourceFileAction() is called when code generation is finished, so taking ownership from GodeGen looks safe. Anyway, module must not be owned by two unique_ptr's. There are at least 3 unique_ptr's that owns the same module object: - CodeGenAction::TheModule - BackendConsumer::TheModule - CodeGeneratorImpl::M It looks like CodeGenAction::TheModule does not cause any problem, it takes ownership according to usual unique_ptr semantics. But the last two variables owns the same object simultaneously, which violates semantics of unique_ptr. The patch fixes ownership by allowing only CodeGeneratorImpl::M to be an owner. http://reviews.llvm.org/D15450 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits